From f1d9a50a3be2bfabc6091d51e120ca63ac1ab2d4 Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Fri, 15 Feb 2019 12:42:15 -0500 Subject: Set up #19 --- .../standalone/test/ecore/queries/Ecore.vql | 29 + .../standalone/test/fam/FAMTerminator.java | 52 + .../dslreasoner/standalone/test/fam/Function.java | 61 ++ .../standalone/test/fam/FunctionType.java | 241 +++++ .../test/fam/FunctionalArchitectureModel.java | 42 + .../standalone/test/fam/FunctionalData.java | 81 ++ .../standalone/test/fam/FunctionalElement.java | 109 ++ .../standalone/test/fam/FunctionalInput.java | 42 + .../standalone/test/fam/FunctionalInterface.java | 73 ++ .../standalone/test/fam/FunctionalOutput.java | 42 + .../standalone/test/fam/InformationLink.java | 81 ++ .../standalone/test/fam/famFactory.java | 96 ++ .../standalone/test/fam/famPackage.java | 1032 +++++++++++++++++++ .../test/fam/impl/FAMTerminatorImpl.java | 196 ++++ .../standalone/test/fam/impl/FunctionImpl.java | 191 ++++ .../fam/impl/FunctionalArchitectureModelImpl.java | 152 +++ .../test/fam/impl/FunctionalDataImpl.java | 267 +++++ .../test/fam/impl/FunctionalElementImpl.java | 318 ++++++ .../test/fam/impl/FunctionalInputImpl.java | 165 ++++ .../test/fam/impl/FunctionalInterfaceImpl.java | 243 +++++ .../test/fam/impl/FunctionalOutputImpl.java | 165 ++++ .../test/fam/impl/InformationLinkImpl.java | 285 ++++++ .../standalone/test/fam/impl/famFactoryImpl.java | 219 +++++ .../standalone/test/fam/impl/famPackageImpl.java | 574 +++++++++++ .../standalone/test/fam/queries/famPatterns.vql | 103 ++ .../test/fam/util/famAdapterFactory.java | 271 +++++ .../standalone/test/fam/util/famSwitch.java | 289 ++++++ .../standalone/test/filesystem/Dir.java | 42 + .../standalone/test/filesystem/FSObject.java | 52 + .../standalone/test/filesystem/File.java | 17 + .../standalone/test/filesystem/FileSystem.java | 70 ++ .../standalone/test/filesystem/Model.java | 69 ++ .../test/filesystem/filesystemFactory.java | 69 ++ .../test/filesystem/filesystemPackage.java | 511 ++++++++++ .../standalone/test/filesystem/impl/DirImpl.java | 165 ++++ .../test/filesystem/impl/FSObjectImpl.java | 196 ++++ .../standalone/test/filesystem/impl/FileImpl.java | 37 + .../test/filesystem/impl/FileSystemImpl.java | 205 ++++ .../standalone/test/filesystem/impl/ModelImpl.java | 221 +++++ .../filesystem/impl/filesystemFactoryImpl.java | 128 +++ .../filesystem/impl/filesystemPackageImpl.java | 356 +++++++ .../test/filesystem/queries/FileSystem.vql | 24 + .../filesystem/util/filesystemAdapterFactory.java | 192 ++++ .../test/filesystem/util/filesystemSwitch.java | 196 ++++ .../standalone/test/yakindu/Choice.java | 17 + .../standalone/test/yakindu/CompositeElement.java | 42 + .../dslreasoner/standalone/test/yakindu/Entry.java | 17 + .../dslreasoner/standalone/test/yakindu/Exit.java | 17 + .../standalone/test/yakindu/FinalState.java | 17 + .../standalone/test/yakindu/Pseudostate.java | 17 + .../standalone/test/yakindu/Region.java | 42 + .../standalone/test/yakindu/RegularState.java | 17 + .../dslreasoner/standalone/test/yakindu/State.java | 17 + .../standalone/test/yakindu/Statechart.java | 17 + .../standalone/test/yakindu/Synchronization.java | 17 + .../standalone/test/yakindu/Transition.java | 81 ++ .../standalone/test/yakindu/Vertex.java | 63 ++ .../standalone/test/yakindu/impl/ChoiceImpl.java | 37 + .../test/yakindu/impl/CompositeElementImpl.java | 152 +++ .../standalone/test/yakindu/impl/EntryImpl.java | 37 + .../standalone/test/yakindu/impl/ExitImpl.java | 37 + .../test/yakindu/impl/FinalStateImpl.java | 37 + .../test/yakindu/impl/PseudostateImpl.java | 37 + .../standalone/test/yakindu/impl/RegionImpl.java | 152 +++ .../test/yakindu/impl/RegularStateImpl.java | 37 + .../standalone/test/yakindu/impl/StateImpl.java | 183 ++++ .../test/yakindu/impl/StatechartImpl.java | 37 + .../test/yakindu/impl/SynchronizationImpl.java | 37 + .../test/yakindu/impl/TransitionImpl.java | 284 ++++++ .../standalone/test/yakindu/impl/VertexImpl.java | 206 ++++ .../test/yakindu/impl/yakinduFactoryImpl.java | 183 ++++ .../test/yakindu/impl/yakinduPackageImpl.java | 494 ++++++++++ .../yakindu/queries/yakinduMutatedPatterns.vql | 270 +++++ .../test/yakindu/queries/yakinduPatterns.vql | 227 +++++ .../test/yakindu/util/yakinduAdapterFactory.java | 336 +++++++ .../test/yakindu/util/yakinduSwitch.java | 378 +++++++ .../standalone/test/yakindu/yakinduFactory.java | 114 +++ .../standalone/test/yakindu/yakinduPackage.java | 1038 ++++++++++++++++++++ 78 files changed, 12663 insertions(+) create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FAMTerminator.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionType.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalArchitectureModel.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalData.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInput.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInterface.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalOutput.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/InformationLink.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famPackage.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FAMTerminatorImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalArchitectureModelImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalDataImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalElementImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInputImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInterfaceImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalOutputImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/InformationLinkImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famFactoryImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famAdapterFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famSwitch.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Dir.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FSObject.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/File.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Model.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemPackage.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/DirImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FSObjectImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/ModelImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemFactoryImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemAdapterFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemSwitch.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java (limited to 'Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone') 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql new file mode 100644 index 00000000..9af35b50 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql @@ -0,0 +1,29 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries + +import epackage "http://www.eclipse.org/emf/2002/Ecore" + +pattern directSupertype(a: EClass, b:EClass) { + EClass.eSuperTypes(a,b); +} + +@Constraint(key={a}, severity="error", message="error") +pattern loopInInheritence(a: EClass) { + find directSupertype+(a,a); +} + +pattern opposite(a:EReference, b: EReference) { + EReference.eOpposite(a,b); +} +@Constraint(key={a}, severity="error", message="error") +pattern oppositeDifferentClass(a:EReference) { + EReference.eOpposite(a,b); + EReference.eContainingClass(a,aContaining); + EReference.eType(b,bTarget); + aContaining != bTarget; +} + +@Constraint(key={a}, severity="error", message="error") +pattern nonSymmetricOpposite(a:EReference, b:EReference) { + find opposite(a,b); + neg find opposite(b,a); +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FAMTerminator.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FAMTerminator.java new file mode 100644 index 00000000..686af44b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FAMTerminator.java @@ -0,0 +1,52 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'FAM Terminator'. + * + * + *

+ * The following features are supported: + *

+ * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFAMTerminator() + * @model + * @generated + */ +public interface FAMTerminator extends EObject { + /** + * Returns the value of the 'Data' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator Terminator}'. + * + *

+ * If the meaning of the 'Data' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Data' container reference. + * @see #setData(FunctionalData) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFAMTerminator_Data() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator + * @model opposite="terminator" transient="false" + * @generated + */ + FunctionalData getData(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator#getData Data}' container reference. + * + * + * @param value the new value of the 'Data' container reference. + * @see #getData() + * @generated + */ + void setData(FunctionalData value); + +} // FAMTerminator 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 new file mode 100644 index 00000000..1fed3a2d --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java @@ -0,0 +1,61 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Function'. + * + * + *

+ * The following features are supported: + *

+ * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction() + * @model + * @generated + */ +public interface Function extends FunctionalElement { + /** + * Returns the value of the 'Sub Elements' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent Parent}'. + * + *

+ * If the meaning of the 'Sub Elements' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Sub Elements' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction_SubElements() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent + * @model opposite="parent" containment="true" + * @generated + */ + EList getSubElements(); + + /** + * Returns the value of the 'Type' attribute. + * The literals are from the enumeration {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType}. + * + *

+ * If the meaning of the 'Type' attribute isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Type' attribute. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction_Type() + * @model required="true" transient="true" changeable="false" volatile="true" derived="true" + * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type'" + * @generated + */ + FunctionType getType(); + +} // Function diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionType.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionType.java new file mode 100644 index 00000000..71e3062d --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionType.java @@ -0,0 +1,241 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.eclipse.emf.common.util.Enumerator; + +/** + * + * A representation of the literals of the enumeration 'Function Type', + * and utility methods for working with them. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionType() + * @model + * @generated + */ +public enum FunctionType implements Enumerator { + /** + * The 'Root' literal object. + * + * + * @see #ROOT_VALUE + * @generated + * @ordered + */ + ROOT(0, "Root", "Root"), + + /** + * The 'Intermediate' literal object. + * + * + * @see #INTERMEDIATE_VALUE + * @generated + * @ordered + */ + INTERMEDIATE(1, "Intermediate", "Intermediate"), + + /** + * The 'Leaf' literal object. + * + * + * @see #LEAF_VALUE + * @generated + * @ordered + */ + LEAF(2, "Leaf", "Leaf"); + + /** + * The 'Root' literal value. + * + *

+ * If the meaning of 'Root' literal object isn't clear, + * there really should be more of a description here... + *

+ * + * @see #ROOT + * @model name="Root" + * @generated + * @ordered + */ + public static final int ROOT_VALUE = 0; + + /** + * The 'Intermediate' literal value. + * + *

+ * If the meaning of 'Intermediate' literal object isn't clear, + * there really should be more of a description here... + *

+ * + * @see #INTERMEDIATE + * @model name="Intermediate" + * @generated + * @ordered + */ + public static final int INTERMEDIATE_VALUE = 1; + + /** + * The 'Leaf' literal value. + * + *

+ * If the meaning of 'Leaf' literal object isn't clear, + * there really should be more of a description here... + *

+ * + * @see #LEAF + * @model name="Leaf" + * @generated + * @ordered + */ + public static final int LEAF_VALUE = 2; + + /** + * An array of all the 'Function Type' enumerators. + * + * + * @generated + */ + private static final FunctionType[] VALUES_ARRAY = + new FunctionType[] { + ROOT, + INTERMEDIATE, + LEAF, + }; + + /** + * A public read-only list of all the 'Function Type' enumerators. + * + * + * @generated + */ + public static final List VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY)); + + /** + * Returns the 'Function Type' literal with the specified literal value. + * + * + * @param literal the literal. + * @return the matching enumerator or null. + * @generated + */ + public static FunctionType get(String literal) { + for (int i = 0; i < VALUES_ARRAY.length; ++i) { + FunctionType result = VALUES_ARRAY[i]; + if (result.toString().equals(literal)) { + return result; + } + } + return null; + } + + /** + * Returns the 'Function Type' literal with the specified name. + * + * + * @param name the name. + * @return the matching enumerator or null. + * @generated + */ + public static FunctionType getByName(String name) { + for (int i = 0; i < VALUES_ARRAY.length; ++i) { + FunctionType result = VALUES_ARRAY[i]; + if (result.getName().equals(name)) { + return result; + } + } + return null; + } + + /** + * Returns the 'Function Type' literal with the specified integer value. + * + * + * @param value the integer value. + * @return the matching enumerator or null. + * @generated + */ + public static FunctionType get(int value) { + switch (value) { + case ROOT_VALUE: return ROOT; + case INTERMEDIATE_VALUE: return INTERMEDIATE; + case LEAF_VALUE: return LEAF; + } + return null; + } + + /** + * + * + * @generated + */ + private final int value; + + /** + * + * + * @generated + */ + private final String name; + + /** + * + * + * @generated + */ + private final String literal; + + /** + * Only this class can construct instances. + * + * + * @generated + */ + private FunctionType(int value, String name, String literal) { + this.value = value; + this.name = name; + this.literal = literal; + } + + /** + * + * + * @generated + */ + public int getValue() { + return value; + } + + /** + * + * + * @generated + */ + public String getName() { + return name; + } + + /** + * + * + * @generated + */ + public String getLiteral() { + return literal; + } + + /** + * Returns the literal value of the enumerator, which is its string representation. + * + * + * @generated + */ + @Override + public String toString() { + return literal; + } + +} //FunctionType diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalArchitectureModel.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalArchitectureModel.java new file mode 100644 index 00000000..d1717a9f --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalArchitectureModel.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Functional Architecture Model'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel#getRootElements Root Elements}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalArchitectureModel() + * @model + * @generated + */ +public interface FunctionalArchitectureModel extends EObject { + /** + * Returns the value of the 'Root Elements' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement}. + * + *

+ * If the meaning of the 'Root Elements' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Root Elements' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalArchitectureModel_RootElements() + * @model containment="true" + * @generated + */ + EList getRootElements(); + +} // FunctionalArchitectureModel diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalData.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalData.java new file mode 100644 index 00000000..675318a8 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalData.java @@ -0,0 +1,81 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Functional Data'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator Terminator}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface Interface}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalData() + * @model abstract="true" + * @generated + */ +public interface FunctionalData extends EObject { + /** + * Returns the value of the 'Terminator' containment reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator#getData Data}'. + * + *

+ * If the meaning of the 'Terminator' containment reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Terminator' containment reference. + * @see #setTerminator(FAMTerminator) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalData_Terminator() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator#getData + * @model opposite="data" containment="true" + * @generated + */ + FAMTerminator getTerminator(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator Terminator}' containment reference. + * + * + * @param value the new value of the 'Terminator' containment reference. + * @see #getTerminator() + * @generated + */ + void setTerminator(FAMTerminator value); + + /** + * Returns the value of the 'Interface' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getData Data}'. + * + *

+ * If the meaning of the 'Interface' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Interface' container reference. + * @see #setInterface(FunctionalInterface) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalData_Interface() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getData + * @model opposite="data" transient="false" + * @generated + */ + FunctionalInterface getInterface(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface Interface}' container reference. + * + * + * @param value the new value of the 'Interface' container reference. + * @see #getInterface() + * @generated + */ + void setInterface(FunctionalInterface value); + +} // FunctionalData 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 new file mode 100644 index 00000000..c3ed76d6 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java @@ -0,0 +1,109 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Functional Element'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface Interface}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getModel Model}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent Parent}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement() + * @model abstract="true" + * @generated + */ +public interface FunctionalElement extends EObject { + /** + * Returns the value of the 'Interface' containment reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement Element}'. + * + *

+ * If the meaning of the 'Interface' containment reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Interface' containment reference. + * @see #setInterface(FunctionalInterface) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Interface() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement + * @model opposite="element" containment="true" + * @generated + */ + FunctionalInterface getInterface(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface Interface}' containment reference. + * + * + * @param value the new value of the 'Interface' containment reference. + * @see #getInterface() + * @generated + */ + void setInterface(FunctionalInterface value); + + /** + * Returns the value of the 'Model' reference. + * + *

+ * If the meaning of the 'Model' reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Model' reference. + * @see #setModel(FunctionalArchitectureModel) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Model() + * @model required="true" transient="true" volatile="true" derived="true" + * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model'" + * @generated + */ + FunctionalArchitectureModel getModel(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getModel Model}' reference. + * + * + * @param value the new value of the 'Model' reference. + * @see #getModel() + * @generated + */ + void setModel(FunctionalArchitectureModel value); + + /** + * Returns the value of the 'Parent' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getSubElements Sub Elements}'. + * + *

+ * If the meaning of the 'Parent' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Parent' container reference. + * @see #setParent(Function) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Parent() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getSubElements + * @model opposite="subElements" transient="false" + * @generated + */ + Function getParent(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent Parent}' container reference. + * + * + * @param value the new value of the 'Parent' container reference. + * @see #getParent() + * @generated + */ + void setParent(Function value); + +} // FunctionalElement diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInput.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInput.java new file mode 100644 index 00000000..de629b29 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInput.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Functional Input'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput#getIncomingLinks Incoming Links}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalInput() + * @model + * @generated + */ +public interface FunctionalInput extends FunctionalData { + /** + * Returns the value of the 'Incoming Links' reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo To}'. + * + *

+ * If the meaning of the 'Incoming Links' reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Incoming Links' reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalInput_IncomingLinks() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo + * @model opposite="to" + * @generated + */ + EList getIncomingLinks(); + +} // FunctionalInput diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInterface.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInterface.java new file mode 100644 index 00000000..732f3cc6 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalInterface.java @@ -0,0 +1,73 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Functional Interface'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getData Data}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement Element}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalInterface() + * @model + * @generated + */ +public interface FunctionalInterface extends EObject { + /** + * Returns the value of the 'Data' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface Interface}'. + * + *

+ * If the meaning of the 'Data' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Data' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalInterface_Data() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface + * @model opposite="interface" containment="true" + * @generated + */ + EList getData(); + + /** + * Returns the value of the 'Element' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface Interface}'. + * + *

+ * If the meaning of the 'Element' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Element' container reference. + * @see #setElement(FunctionalElement) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalInterface_Element() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface + * @model opposite="interface" transient="false" + * @generated + */ + FunctionalElement getElement(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement Element}' container reference. + * + * + * @param value the new value of the 'Element' container reference. + * @see #getElement() + * @generated + */ + void setElement(FunctionalElement value); + +} // FunctionalInterface diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalOutput.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalOutput.java new file mode 100644 index 00000000..51194777 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalOutput.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Functional Output'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput#getOutgoingLinks Outgoing Links}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalOutput() + * @model + * @generated + */ +public interface FunctionalOutput extends FunctionalData { + /** + * Returns the value of the 'Outgoing Links' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom From}'. + * + *

+ * If the meaning of the 'Outgoing Links' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Outgoing Links' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalOutput_OutgoingLinks() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom + * @model opposite="from" containment="true" + * @generated + */ + EList getOutgoingLinks(); + +} // FunctionalOutput diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/InformationLink.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/InformationLink.java new file mode 100644 index 00000000..26946d01 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/InformationLink.java @@ -0,0 +1,81 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Information Link'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom From}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo To}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getInformationLink() + * @model + * @generated + */ +public interface InformationLink extends EObject { + /** + * Returns the value of the 'From' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput#getOutgoingLinks Outgoing Links}'. + * + *

+ * If the meaning of the 'From' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'From' container reference. + * @see #setFrom(FunctionalOutput) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getInformationLink_From() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput#getOutgoingLinks + * @model opposite="outgoingLinks" transient="false" + * @generated + */ + FunctionalOutput getFrom(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom From}' container reference. + * + * + * @param value the new value of the 'From' container reference. + * @see #getFrom() + * @generated + */ + void setFrom(FunctionalOutput value); + + /** + * Returns the value of the 'To' reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput#getIncomingLinks Incoming Links}'. + * + *

+ * If the meaning of the 'To' reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'To' reference. + * @see #setTo(FunctionalInput) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getInformationLink_To() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput#getIncomingLinks + * @model opposite="IncomingLinks" required="true" + * @generated + */ + FunctionalInput getTo(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo To}' reference. + * + * + * @param value the new value of the 'To' reference. + * @see #getTo() + * @generated + */ + void setTo(FunctionalInput value); + +} // InformationLink diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famFactory.java new file mode 100644 index 00000000..cdab0041 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famFactory.java @@ -0,0 +1,96 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EFactory; + +/** + * + * The Factory for the model. + * It provides a create method for each non-abstract class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage + * @generated + */ +public interface famFactory extends EFactory { + /** + * The singleton instance of the factory. + * + * + * @generated + */ + famFactory eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.init(); + + /** + * Returns a new object of class 'Functional Architecture Model'. + * + * + * @return a new object of class 'Functional Architecture Model'. + * @generated + */ + FunctionalArchitectureModel createFunctionalArchitectureModel(); + + /** + * Returns a new object of class 'Function'. + * + * + * @return a new object of class 'Function'. + * @generated + */ + Function createFunction(); + + /** + * Returns a new object of class 'FAM Terminator'. + * + * + * @return a new object of class 'FAM Terminator'. + * @generated + */ + FAMTerminator createFAMTerminator(); + + /** + * Returns a new object of class 'Information Link'. + * + * + * @return a new object of class 'Information Link'. + * @generated + */ + InformationLink createInformationLink(); + + /** + * Returns a new object of class 'Functional Interface'. + * + * + * @return a new object of class 'Functional Interface'. + * @generated + */ + FunctionalInterface createFunctionalInterface(); + + /** + * Returns a new object of class 'Functional Input'. + * + * + * @return a new object of class 'Functional Input'. + * @generated + */ + FunctionalInput createFunctionalInput(); + + /** + * Returns a new object of class 'Functional Output'. + * + * + * @return a new object of class 'Functional Output'. + * @generated + */ + FunctionalOutput createFunctionalOutput(); + + /** + * Returns the package supported by this factory. + * + * + * @return the package supported by this factory. + * @generated + */ + famPackage getfamPackage(); + +} //famFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famPackage.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famPackage.java new file mode 100644 index 00000000..9b876f8b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/famPackage.java @@ -0,0 +1,1032 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EEnum; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +/** + * + * The Package for the model. + * It contains accessors for the meta objects to represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famFactory + * @model kind="package" + * annotation="http://www.eclipse.org/emf/2002/Ecore settingDelegates='org.eclipse.viatra.query.querybasedfeature'" + * @generated + */ +public interface famPackage extends EPackage { + /** + * The package name. + * + * + * @generated + */ + String eNAME = "fam"; + + /** + * The package namespace URI. + * + * + * @generated + */ + String eNS_URI = "FamMetamodel"; + + /** + * The package namespace name. + * + * + * @generated + */ + String eNS_PREFIX = "fam"; + + /** + * The singleton instance of the package. + * + * + * @generated + */ + famPackage eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl.init(); + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl Functional Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalElement() + * @generated + */ + int FUNCTIONAL_ELEMENT = 0; + + /** + * The feature id for the 'Interface' containment reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ELEMENT__INTERFACE = 0; + + /** + * The feature id for the 'Model' reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ELEMENT__MODEL = 1; + + /** + * The feature id for the 'Parent' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ELEMENT__PARENT = 2; + + /** + * The number of structural features of the 'Functional Element' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ELEMENT_FEATURE_COUNT = 3; + + /** + * The number of operations of the 'Functional Element' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ELEMENT_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalArchitectureModelImpl Functional Architecture Model}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalArchitectureModelImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalArchitectureModel() + * @generated + */ + int FUNCTIONAL_ARCHITECTURE_MODEL = 1; + + /** + * The feature id for the 'Root Elements' containment reference list. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS = 0; + + /** + * The number of structural features of the 'Functional Architecture Model' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ARCHITECTURE_MODEL_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'Functional Architecture Model' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_ARCHITECTURE_MODEL_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl Function}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunction() + * @generated + */ + int FUNCTION = 2; + + /** + * The feature id for the 'Interface' containment reference. + * + * + * @generated + * @ordered + */ + int FUNCTION__INTERFACE = FUNCTIONAL_ELEMENT__INTERFACE; + + /** + * The feature id for the 'Model' reference. + * + * + * @generated + * @ordered + */ + int FUNCTION__MODEL = FUNCTIONAL_ELEMENT__MODEL; + + /** + * The feature id for the 'Parent' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTION__PARENT = FUNCTIONAL_ELEMENT__PARENT; + + /** + * The feature id for the 'Sub Elements' containment reference list. + * + * + * @generated + * @ordered + */ + int FUNCTION__SUB_ELEMENTS = FUNCTIONAL_ELEMENT_FEATURE_COUNT + 0; + + /** + * The feature id for the 'Type' attribute. + * + * + * @generated + * @ordered + */ + int FUNCTION__TYPE = FUNCTIONAL_ELEMENT_FEATURE_COUNT + 1; + + /** + * The number of structural features of the 'Function' class. + * + * + * @generated + * @ordered + */ + int FUNCTION_FEATURE_COUNT = FUNCTIONAL_ELEMENT_FEATURE_COUNT + 2; + + /** + * The number of operations of the 'Function' class. + * + * + * @generated + * @ordered + */ + int FUNCTION_OPERATION_COUNT = FUNCTIONAL_ELEMENT_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FAMTerminatorImpl FAM Terminator}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FAMTerminatorImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFAMTerminator() + * @generated + */ + int FAM_TERMINATOR = 3; + + /** + * The feature id for the 'Data' container reference. + * + * + * @generated + * @ordered + */ + int FAM_TERMINATOR__DATA = 0; + + /** + * The number of structural features of the 'FAM Terminator' class. + * + * + * @generated + * @ordered + */ + int FAM_TERMINATOR_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'FAM Terminator' class. + * + * + * @generated + * @ordered + */ + int FAM_TERMINATOR_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl Information Link}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getInformationLink() + * @generated + */ + int INFORMATION_LINK = 4; + + /** + * The feature id for the 'From' container reference. + * + * + * @generated + * @ordered + */ + int INFORMATION_LINK__FROM = 0; + + /** + * The feature id for the 'To' reference. + * + * + * @generated + * @ordered + */ + int INFORMATION_LINK__TO = 1; + + /** + * The number of structural features of the 'Information Link' class. + * + * + * @generated + * @ordered + */ + int INFORMATION_LINK_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Information Link' class. + * + * + * @generated + * @ordered + */ + int INFORMATION_LINK_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl Functional Interface}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalInterface() + * @generated + */ + int FUNCTIONAL_INTERFACE = 5; + + /** + * The feature id for the 'Data' containment reference list. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INTERFACE__DATA = 0; + + /** + * The feature id for the 'Element' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INTERFACE__ELEMENT = 1; + + /** + * The number of structural features of the 'Functional Interface' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INTERFACE_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Functional Interface' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INTERFACE_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl Functional Data}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalData() + * @generated + */ + int FUNCTIONAL_DATA = 8; + + /** + * The feature id for the 'Terminator' containment reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_DATA__TERMINATOR = 0; + + /** + * The feature id for the 'Interface' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_DATA__INTERFACE = 1; + + /** + * The number of structural features of the 'Functional Data' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_DATA_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Functional Data' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_DATA_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInputImpl Functional Input}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInputImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalInput() + * @generated + */ + int FUNCTIONAL_INPUT = 6; + + /** + * The feature id for the 'Terminator' containment reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INPUT__TERMINATOR = FUNCTIONAL_DATA__TERMINATOR; + + /** + * The feature id for the 'Interface' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INPUT__INTERFACE = FUNCTIONAL_DATA__INTERFACE; + + /** + * The feature id for the 'Incoming Links' reference list. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INPUT__INCOMING_LINKS = FUNCTIONAL_DATA_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'Functional Input' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INPUT_FEATURE_COUNT = FUNCTIONAL_DATA_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'Functional Input' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_INPUT_OPERATION_COUNT = FUNCTIONAL_DATA_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalOutputImpl Functional Output}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalOutputImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalOutput() + * @generated + */ + int FUNCTIONAL_OUTPUT = 7; + + /** + * The feature id for the 'Terminator' containment reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_OUTPUT__TERMINATOR = FUNCTIONAL_DATA__TERMINATOR; + + /** + * The feature id for the 'Interface' container reference. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_OUTPUT__INTERFACE = FUNCTIONAL_DATA__INTERFACE; + + /** + * The feature id for the 'Outgoing Links' containment reference list. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_OUTPUT__OUTGOING_LINKS = FUNCTIONAL_DATA_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'Functional Output' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_OUTPUT_FEATURE_COUNT = FUNCTIONAL_DATA_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'Functional Output' class. + * + * + * @generated + * @ordered + */ + int FUNCTIONAL_OUTPUT_OPERATION_COUNT = FUNCTIONAL_DATA_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType Function Type}' enum. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionType() + * @generated + */ + int FUNCTION_TYPE = 9; + + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement Functional Element}'. + * + * + * @return the meta object for class 'Functional Element'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement + * @generated + */ + EClass getFunctionalElement(); + + /** + * Returns the meta object for the containment reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface Interface}'. + * + * + * @return the meta object for the containment reference 'Interface'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getInterface() + * @see #getFunctionalElement() + * @generated + */ + EReference getFunctionalElement_Interface(); + + /** + * Returns the meta object for the reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getModel Model}'. + * + * + * @return the meta object for the reference 'Model'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getModel() + * @see #getFunctionalElement() + * @generated + */ + EReference getFunctionalElement_Model(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent Parent}'. + * + * + * @return the meta object for the container reference 'Parent'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement#getParent() + * @see #getFunctionalElement() + * @generated + */ + EReference getFunctionalElement_Parent(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel Functional Architecture Model}'. + * + * + * @return the meta object for class 'Functional Architecture Model'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel + * @generated + */ + EClass getFunctionalArchitectureModel(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel#getRootElements Root Elements}'. + * + * + * @return the meta object for the containment reference list 'Root Elements'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel#getRootElements() + * @see #getFunctionalArchitectureModel() + * @generated + */ + EReference getFunctionalArchitectureModel_RootElements(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function Function}'. + * + * + * @return the meta object for class 'Function'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function + * @generated + */ + EClass getFunction(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getSubElements Sub Elements}'. + * + * + * @return the meta object for the containment reference list 'Sub Elements'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getSubElements() + * @see #getFunction() + * @generated + */ + EReference getFunction_SubElements(); + + /** + * Returns the meta object for the attribute '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getType Type}'. + * + * + * @return the meta object for the attribute 'Type'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function#getType() + * @see #getFunction() + * @generated + */ + EAttribute getFunction_Type(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator FAM Terminator}'. + * + * + * @return the meta object for class 'FAM Terminator'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator + * @generated + */ + EClass getFAMTerminator(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator#getData Data}'. + * + * + * @return the meta object for the container reference 'Data'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator#getData() + * @see #getFAMTerminator() + * @generated + */ + EReference getFAMTerminator_Data(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink Information Link}'. + * + * + * @return the meta object for class 'Information Link'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink + * @generated + */ + EClass getInformationLink(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom From}'. + * + * + * @return the meta object for the container reference 'From'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getFrom() + * @see #getInformationLink() + * @generated + */ + EReference getInformationLink_From(); + + /** + * Returns the meta object for the reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo To}'. + * + * + * @return the meta object for the reference 'To'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink#getTo() + * @see #getInformationLink() + * @generated + */ + EReference getInformationLink_To(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface Functional Interface}'. + * + * + * @return the meta object for class 'Functional Interface'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface + * @generated + */ + EClass getFunctionalInterface(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getData Data}'. + * + * + * @return the meta object for the containment reference list 'Data'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getData() + * @see #getFunctionalInterface() + * @generated + */ + EReference getFunctionalInterface_Data(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement Element}'. + * + * + * @return the meta object for the container reference 'Element'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface#getElement() + * @see #getFunctionalInterface() + * @generated + */ + EReference getFunctionalInterface_Element(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput Functional Input}'. + * + * + * @return the meta object for class 'Functional Input'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput + * @generated + */ + EClass getFunctionalInput(); + + /** + * Returns the meta object for the reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput#getIncomingLinks Incoming Links}'. + * + * + * @return the meta object for the reference list 'Incoming Links'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput#getIncomingLinks() + * @see #getFunctionalInput() + * @generated + */ + EReference getFunctionalInput_IncomingLinks(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput Functional Output}'. + * + * + * @return the meta object for class 'Functional Output'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput + * @generated + */ + EClass getFunctionalOutput(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput#getOutgoingLinks Outgoing Links}'. + * + * + * @return the meta object for the containment reference list 'Outgoing Links'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput#getOutgoingLinks() + * @see #getFunctionalOutput() + * @generated + */ + EReference getFunctionalOutput_OutgoingLinks(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData Functional Data}'. + * + * + * @return the meta object for class 'Functional Data'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData + * @generated + */ + EClass getFunctionalData(); + + /** + * Returns the meta object for the containment reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator Terminator}'. + * + * + * @return the meta object for the containment reference 'Terminator'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getTerminator() + * @see #getFunctionalData() + * @generated + */ + EReference getFunctionalData_Terminator(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface Interface}'. + * + * + * @return the meta object for the container reference 'Interface'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData#getInterface() + * @see #getFunctionalData() + * @generated + */ + EReference getFunctionalData_Interface(); + + /** + * Returns the meta object for enum '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType Function Type}'. + * + * + * @return the meta object for enum 'Function Type'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType + * @generated + */ + EEnum getFunctionType(); + + /** + * Returns the factory that creates the instances of the model. + * + * + * @return the factory that creates the instances of the model. + * @generated + */ + famFactory getfamFactory(); + + /** + * + * Defines literals for the meta objects that represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @generated + */ + interface Literals { + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl Functional Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalElement() + * @generated + */ + EClass FUNCTIONAL_ELEMENT = eINSTANCE.getFunctionalElement(); + + /** + * The meta object literal for the 'Interface' containment reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_ELEMENT__INTERFACE = eINSTANCE.getFunctionalElement_Interface(); + + /** + * The meta object literal for the 'Model' reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_ELEMENT__MODEL = eINSTANCE.getFunctionalElement_Model(); + + /** + * The meta object literal for the 'Parent' container reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_ELEMENT__PARENT = eINSTANCE.getFunctionalElement_Parent(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalArchitectureModelImpl Functional Architecture Model}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalArchitectureModelImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalArchitectureModel() + * @generated + */ + EClass FUNCTIONAL_ARCHITECTURE_MODEL = eINSTANCE.getFunctionalArchitectureModel(); + + /** + * The meta object literal for the 'Root Elements' containment reference list feature. + * + * + * @generated + */ + EReference FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS = eINSTANCE.getFunctionalArchitectureModel_RootElements(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl Function}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunction() + * @generated + */ + EClass FUNCTION = eINSTANCE.getFunction(); + + /** + * The meta object literal for the 'Sub Elements' containment reference list feature. + * + * + * @generated + */ + EReference FUNCTION__SUB_ELEMENTS = eINSTANCE.getFunction_SubElements(); + + /** + * The meta object literal for the 'Type' attribute feature. + * + * + * @generated + */ + EAttribute FUNCTION__TYPE = eINSTANCE.getFunction_Type(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FAMTerminatorImpl FAM Terminator}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FAMTerminatorImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFAMTerminator() + * @generated + */ + EClass FAM_TERMINATOR = eINSTANCE.getFAMTerminator(); + + /** + * The meta object literal for the 'Data' container reference feature. + * + * + * @generated + */ + EReference FAM_TERMINATOR__DATA = eINSTANCE.getFAMTerminator_Data(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl Information Link}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getInformationLink() + * @generated + */ + EClass INFORMATION_LINK = eINSTANCE.getInformationLink(); + + /** + * The meta object literal for the 'From' container reference feature. + * + * + * @generated + */ + EReference INFORMATION_LINK__FROM = eINSTANCE.getInformationLink_From(); + + /** + * The meta object literal for the 'To' reference feature. + * + * + * @generated + */ + EReference INFORMATION_LINK__TO = eINSTANCE.getInformationLink_To(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl Functional Interface}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalInterface() + * @generated + */ + EClass FUNCTIONAL_INTERFACE = eINSTANCE.getFunctionalInterface(); + + /** + * The meta object literal for the 'Data' containment reference list feature. + * + * + * @generated + */ + EReference FUNCTIONAL_INTERFACE__DATA = eINSTANCE.getFunctionalInterface_Data(); + + /** + * The meta object literal for the 'Element' container reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_INTERFACE__ELEMENT = eINSTANCE.getFunctionalInterface_Element(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInputImpl Functional Input}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInputImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalInput() + * @generated + */ + EClass FUNCTIONAL_INPUT = eINSTANCE.getFunctionalInput(); + + /** + * The meta object literal for the 'Incoming Links' reference list feature. + * + * + * @generated + */ + EReference FUNCTIONAL_INPUT__INCOMING_LINKS = eINSTANCE.getFunctionalInput_IncomingLinks(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalOutputImpl Functional Output}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalOutputImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalOutput() + * @generated + */ + EClass FUNCTIONAL_OUTPUT = eINSTANCE.getFunctionalOutput(); + + /** + * The meta object literal for the 'Outgoing Links' containment reference list feature. + * + * + * @generated + */ + EReference FUNCTIONAL_OUTPUT__OUTGOING_LINKS = eINSTANCE.getFunctionalOutput_OutgoingLinks(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl Functional Data}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionalData() + * @generated + */ + EClass FUNCTIONAL_DATA = eINSTANCE.getFunctionalData(); + + /** + * The meta object literal for the 'Terminator' containment reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_DATA__TERMINATOR = eINSTANCE.getFunctionalData_Terminator(); + + /** + * The meta object literal for the 'Interface' container reference feature. + * + * + * @generated + */ + EReference FUNCTIONAL_DATA__INTERFACE = eINSTANCE.getFunctionalData_Interface(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType Function Type}' enum. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famPackageImpl#getFunctionType() + * @generated + */ + EEnum FUNCTION_TYPE = eINSTANCE.getFunctionType(); + + } + +} //famPackage diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FAMTerminatorImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FAMTerminatorImpl.java new file mode 100644 index 00000000..6eba60f6 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FAMTerminatorImpl.java @@ -0,0 +1,196 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'FAM Terminator'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FAMTerminatorImpl#getData Data}
  • + *
+ * + * @generated + */ +public class FAMTerminatorImpl extends MinimalEObjectImpl.Container implements FAMTerminator { + /** + * + * + * @generated + */ + protected FAMTerminatorImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FAM_TERMINATOR; + } + + /** + * + * + * @generated + */ + public FunctionalData getData() { + if (eContainerFeatureID() != famPackage.FAM_TERMINATOR__DATA) return null; + return (FunctionalData)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetData(FunctionalData newData, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newData, famPackage.FAM_TERMINATOR__DATA, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setData(FunctionalData newData) { + if (newData != eInternalContainer() || (eContainerFeatureID() != famPackage.FAM_TERMINATOR__DATA && newData != null)) { + if (EcoreUtil.isAncestor(this, newData)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newData != null) + msgs = ((InternalEObject)newData).eInverseAdd(this, famPackage.FUNCTIONAL_DATA__TERMINATOR, FunctionalData.class, msgs); + msgs = basicSetData(newData, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FAM_TERMINATOR__DATA, newData, newData)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetData((FunctionalData)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + return basicSetData(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case famPackage.FAM_TERMINATOR__DATA: + return eInternalContainer().eInverseRemove(this, famPackage.FUNCTIONAL_DATA__TERMINATOR, FunctionalData.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + return getData(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + setData((FunctionalData)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + setData((FunctionalData)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FAM_TERMINATOR__DATA: + return getData() != null; + } + return super.eIsSet(featureID); + } + +} //FAMTerminatorImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionImpl.java new file mode 100644 index 00000000..ec3e884e --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionImpl.java @@ -0,0 +1,191 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Function'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl#getSubElements Sub Elements}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl#getType Type}
  • + *
+ * + * @generated + */ +public class FunctionImpl extends FunctionalElementImpl implements Function { + /** + * The cached value of the '{@link #getSubElements() Sub Elements}' containment reference list. + * + * + * @see #getSubElements() + * @generated + * @ordered + */ + protected EList subElements; + + /** + * The cached setting delegate for the '{@link #getType() Type}' attribute. + * + * + * @see #getType() + * @generated + * @ordered + */ + protected EStructuralFeature.Internal.SettingDelegate TYPE__ESETTING_DELEGATE = ((EStructuralFeature.Internal)famPackage.Literals.FUNCTION__TYPE).getSettingDelegate(); + + /** + * + * + * @generated + */ + protected FunctionImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTION; + } + + /** + * + * + * @generated + */ + public EList getSubElements() { + if (subElements == null) { + subElements = new EObjectContainmentWithInverseEList(FunctionalElement.class, this, famPackage.FUNCTION__SUB_ELEMENTS, famPackage.FUNCTIONAL_ELEMENT__PARENT); + } + return subElements; + } + + /** + * + * + * @generated + */ + public FunctionType getType() { + return (FunctionType)TYPE__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + return ((InternalEList)(InternalEList)getSubElements()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + return ((InternalEList)getSubElements()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + return getSubElements(); + case famPackage.FUNCTION__TYPE: + return getType(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + getSubElements().clear(); + getSubElements().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + getSubElements().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTION__SUB_ELEMENTS: + return subElements != null && !subElements.isEmpty(); + case famPackage.FUNCTION__TYPE: + return TYPE__ESETTING_DELEGATE.dynamicIsSet(this, null, 0); + } + return super.eIsSet(featureID); + } + +} //FunctionImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalArchitectureModelImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalArchitectureModelImpl.java new file mode 100644 index 00000000..1b45df44 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalArchitectureModelImpl.java @@ -0,0 +1,152 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Functional Architecture Model'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalArchitectureModelImpl#getRootElements Root Elements}
  • + *
+ * + * @generated + */ +public class FunctionalArchitectureModelImpl extends MinimalEObjectImpl.Container implements FunctionalArchitectureModel { + /** + * The cached value of the '{@link #getRootElements() Root Elements}' containment reference list. + * + * + * @see #getRootElements() + * @generated + * @ordered + */ + protected EList rootElements; + + /** + * + * + * @generated + */ + protected FunctionalArchitectureModelImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_ARCHITECTURE_MODEL; + } + + /** + * + * + * @generated + */ + public EList getRootElements() { + if (rootElements == null) { + rootElements = new EObjectContainmentEList(FunctionalElement.class, this, famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS); + } + return rootElements; + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS: + return ((InternalEList)getRootElements()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS: + return getRootElements(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS: + getRootElements().clear(); + getRootElements().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS: + getRootElements().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS: + return rootElements != null && !rootElements.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //FunctionalArchitectureModelImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalDataImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalDataImpl.java new file mode 100644 index 00000000..069d53d4 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalDataImpl.java @@ -0,0 +1,267 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'Functional Data'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl#getTerminator Terminator}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalDataImpl#getInterface Interface}
  • + *
+ * + * @generated + */ +public abstract class FunctionalDataImpl extends MinimalEObjectImpl.Container implements FunctionalData { + /** + * The cached value of the '{@link #getTerminator() Terminator}' containment reference. + * + * + * @see #getTerminator() + * @generated + * @ordered + */ + protected FAMTerminator terminator; + + /** + * + * + * @generated + */ + protected FunctionalDataImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_DATA; + } + + /** + * + * + * @generated + */ + public FAMTerminator getTerminator() { + return terminator; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetTerminator(FAMTerminator newTerminator, NotificationChain msgs) { + FAMTerminator oldTerminator = terminator; + terminator = newTerminator; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_DATA__TERMINATOR, oldTerminator, newTerminator); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setTerminator(FAMTerminator newTerminator) { + if (newTerminator != terminator) { + NotificationChain msgs = null; + if (terminator != null) + msgs = ((InternalEObject)terminator).eInverseRemove(this, famPackage.FAM_TERMINATOR__DATA, FAMTerminator.class, msgs); + if (newTerminator != null) + msgs = ((InternalEObject)newTerminator).eInverseAdd(this, famPackage.FAM_TERMINATOR__DATA, FAMTerminator.class, msgs); + msgs = basicSetTerminator(newTerminator, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_DATA__TERMINATOR, newTerminator, newTerminator)); + } + + /** + * + * + * @generated + */ + public FunctionalInterface getInterface() { + if (eContainerFeatureID() != famPackage.FUNCTIONAL_DATA__INTERFACE) return null; + return (FunctionalInterface)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetInterface(FunctionalInterface newInterface, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newInterface, famPackage.FUNCTIONAL_DATA__INTERFACE, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setInterface(FunctionalInterface newInterface) { + if (newInterface != eInternalContainer() || (eContainerFeatureID() != famPackage.FUNCTIONAL_DATA__INTERFACE && newInterface != null)) { + if (EcoreUtil.isAncestor(this, newInterface)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newInterface != null) + msgs = ((InternalEObject)newInterface).eInverseAdd(this, famPackage.FUNCTIONAL_INTERFACE__DATA, FunctionalInterface.class, msgs); + msgs = basicSetInterface(newInterface, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_DATA__INTERFACE, newInterface, newInterface)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + if (terminator != null) + msgs = ((InternalEObject)terminator).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - famPackage.FUNCTIONAL_DATA__TERMINATOR, null, msgs); + return basicSetTerminator((FAMTerminator)otherEnd, msgs); + case famPackage.FUNCTIONAL_DATA__INTERFACE: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetInterface((FunctionalInterface)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + return basicSetTerminator(null, msgs); + case famPackage.FUNCTIONAL_DATA__INTERFACE: + return basicSetInterface(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case famPackage.FUNCTIONAL_DATA__INTERFACE: + return eInternalContainer().eInverseRemove(this, famPackage.FUNCTIONAL_INTERFACE__DATA, FunctionalInterface.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + return getTerminator(); + case famPackage.FUNCTIONAL_DATA__INTERFACE: + return getInterface(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + setTerminator((FAMTerminator)newValue); + return; + case famPackage.FUNCTIONAL_DATA__INTERFACE: + setInterface((FunctionalInterface)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + setTerminator((FAMTerminator)null); + return; + case famPackage.FUNCTIONAL_DATA__INTERFACE: + setInterface((FunctionalInterface)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_DATA__TERMINATOR: + return terminator != null; + case famPackage.FUNCTIONAL_DATA__INTERFACE: + return getInterface() != null; + } + return super.eIsSet(featureID); + } + +} //FunctionalDataImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalElementImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalElementImpl.java new file mode 100644 index 00000000..318a8706 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalElementImpl.java @@ -0,0 +1,318 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'Functional Element'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl#getInterface Interface}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl#getModel Model}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl#getParent Parent}
  • + *
+ * + * @generated + */ +public abstract class FunctionalElementImpl extends MinimalEObjectImpl.Container implements FunctionalElement { + /** + * The cached value of the '{@link #getInterface() Interface}' containment reference. + * + * + * @see #getInterface() + * @generated + * @ordered + */ + protected FunctionalInterface interface_; + + /** + * The cached setting delegate for the '{@link #getModel() Model}' reference. + * + * + * @see #getModel() + * @generated + * @ordered + */ + protected EStructuralFeature.Internal.SettingDelegate MODEL__ESETTING_DELEGATE = ((EStructuralFeature.Internal)famPackage.Literals.FUNCTIONAL_ELEMENT__MODEL).getSettingDelegate(); + + /** + * + * + * @generated + */ + protected FunctionalElementImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_ELEMENT; + } + + /** + * + * + * @generated + */ + public FunctionalInterface getInterface() { + return interface_; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetInterface(FunctionalInterface newInterface, NotificationChain msgs) { + FunctionalInterface oldInterface = interface_; + interface_ = newInterface; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_ELEMENT__INTERFACE, oldInterface, newInterface); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setInterface(FunctionalInterface newInterface) { + if (newInterface != interface_) { + NotificationChain msgs = null; + if (interface_ != null) + msgs = ((InternalEObject)interface_).eInverseRemove(this, famPackage.FUNCTIONAL_INTERFACE__ELEMENT, FunctionalInterface.class, msgs); + if (newInterface != null) + msgs = ((InternalEObject)newInterface).eInverseAdd(this, famPackage.FUNCTIONAL_INTERFACE__ELEMENT, FunctionalInterface.class, msgs); + msgs = basicSetInterface(newInterface, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_ELEMENT__INTERFACE, newInterface, newInterface)); + } + + /** + * + * + * @generated + */ + public FunctionalArchitectureModel getModel() { + return (FunctionalArchitectureModel)MODEL__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false); + } + + /** + * + * + * @generated + */ + public FunctionalArchitectureModel basicGetModel() { + return (FunctionalArchitectureModel)MODEL__ESETTING_DELEGATE.dynamicGet(this, null, 0, false, false); + } + + /** + * + * + * @generated + */ + public void setModel(FunctionalArchitectureModel newModel) { + MODEL__ESETTING_DELEGATE.dynamicSet(this, null, 0, newModel); + } + + /** + * + * + * @generated + */ + public Function getParent() { + if (eContainerFeatureID() != famPackage.FUNCTIONAL_ELEMENT__PARENT) return null; + return (Function)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetParent(Function newParent, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newParent, famPackage.FUNCTIONAL_ELEMENT__PARENT, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setParent(Function newParent) { + if (newParent != eInternalContainer() || (eContainerFeatureID() != famPackage.FUNCTIONAL_ELEMENT__PARENT && newParent != null)) { + if (EcoreUtil.isAncestor(this, newParent)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newParent != null) + msgs = ((InternalEObject)newParent).eInverseAdd(this, famPackage.FUNCTION__SUB_ELEMENTS, Function.class, msgs); + msgs = basicSetParent(newParent, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_ELEMENT__PARENT, newParent, newParent)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + if (interface_ != null) + msgs = ((InternalEObject)interface_).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - famPackage.FUNCTIONAL_ELEMENT__INTERFACE, null, msgs); + return basicSetInterface((FunctionalInterface)otherEnd, msgs); + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetParent((Function)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + return basicSetInterface(null, msgs); + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + return basicSetParent(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + return eInternalContainer().eInverseRemove(this, famPackage.FUNCTION__SUB_ELEMENTS, Function.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + return getInterface(); + case famPackage.FUNCTIONAL_ELEMENT__MODEL: + if (resolve) return getModel(); + return basicGetModel(); + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + return getParent(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + setInterface((FunctionalInterface)newValue); + return; + case famPackage.FUNCTIONAL_ELEMENT__MODEL: + setModel((FunctionalArchitectureModel)newValue); + return; + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + setParent((Function)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + setInterface((FunctionalInterface)null); + return; + case famPackage.FUNCTIONAL_ELEMENT__MODEL: + setModel((FunctionalArchitectureModel)null); + return; + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + setParent((Function)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_ELEMENT__INTERFACE: + return interface_ != null; + case famPackage.FUNCTIONAL_ELEMENT__MODEL: + return MODEL__ESETTING_DELEGATE.dynamicIsSet(this, null, 0); + case famPackage.FUNCTIONAL_ELEMENT__PARENT: + return getParent() != null; + } + return super.eIsSet(featureID); + } + +} //FunctionalElementImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInputImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInputImpl.java new file mode 100644 index 00000000..b62e9742 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInputImpl.java @@ -0,0 +1,165 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Functional Input'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInputImpl#getIncomingLinks Incoming Links}
  • + *
+ * + * @generated + */ +public class FunctionalInputImpl extends FunctionalDataImpl implements FunctionalInput { + /** + * The cached value of the '{@link #getIncomingLinks() Incoming Links}' reference list. + * + * + * @see #getIncomingLinks() + * @generated + * @ordered + */ + protected EList incomingLinks; + + /** + * + * + * @generated + */ + protected FunctionalInputImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_INPUT; + } + + /** + * + * + * @generated + */ + public EList getIncomingLinks() { + if (incomingLinks == null) { + incomingLinks = new EObjectWithInverseResolvingEList(InformationLink.class, this, famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS, famPackage.INFORMATION_LINK__TO); + } + return incomingLinks; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + return ((InternalEList)(InternalEList)getIncomingLinks()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + return ((InternalEList)getIncomingLinks()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + return getIncomingLinks(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + getIncomingLinks().clear(); + getIncomingLinks().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + getIncomingLinks().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS: + return incomingLinks != null && !incomingLinks.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //FunctionalInputImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInterfaceImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInterfaceImpl.java new file mode 100644 index 00000000..b9417a23 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalInterfaceImpl.java @@ -0,0 +1,243 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Functional Interface'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl#getData Data}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalInterfaceImpl#getElement Element}
  • + *
+ * + * @generated + */ +public class FunctionalInterfaceImpl extends MinimalEObjectImpl.Container implements FunctionalInterface { + /** + * The cached value of the '{@link #getData() Data}' containment reference list. + * + * + * @see #getData() + * @generated + * @ordered + */ + protected EList data; + + /** + * + * + * @generated + */ + protected FunctionalInterfaceImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_INTERFACE; + } + + /** + * + * + * @generated + */ + public EList getData() { + if (data == null) { + data = new EObjectContainmentWithInverseEList(FunctionalData.class, this, famPackage.FUNCTIONAL_INTERFACE__DATA, famPackage.FUNCTIONAL_DATA__INTERFACE); + } + return data; + } + + /** + * + * + * @generated + */ + public FunctionalElement getElement() { + if (eContainerFeatureID() != famPackage.FUNCTIONAL_INTERFACE__ELEMENT) return null; + return (FunctionalElement)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetElement(FunctionalElement newElement, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newElement, famPackage.FUNCTIONAL_INTERFACE__ELEMENT, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setElement(FunctionalElement newElement) { + if (newElement != eInternalContainer() || (eContainerFeatureID() != famPackage.FUNCTIONAL_INTERFACE__ELEMENT && newElement != null)) { + if (EcoreUtil.isAncestor(this, newElement)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newElement != null) + msgs = ((InternalEObject)newElement).eInverseAdd(this, famPackage.FUNCTIONAL_ELEMENT__INTERFACE, FunctionalElement.class, msgs); + msgs = basicSetElement(newElement, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.FUNCTIONAL_INTERFACE__ELEMENT, newElement, newElement)); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + return ((InternalEList)(InternalEList)getData()).basicAdd(otherEnd, msgs); + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetElement((FunctionalElement)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + return ((InternalEList)getData()).basicRemove(otherEnd, msgs); + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + return basicSetElement(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + return eInternalContainer().eInverseRemove(this, famPackage.FUNCTIONAL_ELEMENT__INTERFACE, FunctionalElement.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + return getData(); + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + return getElement(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + getData().clear(); + getData().addAll((Collection)newValue); + return; + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + setElement((FunctionalElement)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + getData().clear(); + return; + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + setElement((FunctionalElement)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_INTERFACE__DATA: + return data != null && !data.isEmpty(); + case famPackage.FUNCTIONAL_INTERFACE__ELEMENT: + return getElement() != null; + } + return super.eIsSet(featureID); + } + +} //FunctionalInterfaceImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalOutputImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalOutputImpl.java new file mode 100644 index 00000000..30bde348 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/FunctionalOutputImpl.java @@ -0,0 +1,165 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Functional Output'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalOutputImpl#getOutgoingLinks Outgoing Links}
  • + *
+ * + * @generated + */ +public class FunctionalOutputImpl extends FunctionalDataImpl implements FunctionalOutput { + /** + * The cached value of the '{@link #getOutgoingLinks() Outgoing Links}' containment reference list. + * + * + * @see #getOutgoingLinks() + * @generated + * @ordered + */ + protected EList outgoingLinks; + + /** + * + * + * @generated + */ + protected FunctionalOutputImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.FUNCTIONAL_OUTPUT; + } + + /** + * + * + * @generated + */ + public EList getOutgoingLinks() { + if (outgoingLinks == null) { + outgoingLinks = new EObjectContainmentWithInverseEList(InformationLink.class, this, famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS, famPackage.INFORMATION_LINK__FROM); + } + return outgoingLinks; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + return ((InternalEList)(InternalEList)getOutgoingLinks()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + return ((InternalEList)getOutgoingLinks()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + return getOutgoingLinks(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + getOutgoingLinks().clear(); + getOutgoingLinks().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + getOutgoingLinks().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS: + return outgoingLinks != null && !outgoingLinks.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //FunctionalOutputImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/InformationLinkImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/InformationLinkImpl.java new file mode 100644 index 00000000..b87f4201 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/InformationLinkImpl.java @@ -0,0 +1,285 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'Information Link'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl#getFrom From}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.InformationLinkImpl#getTo To}
  • + *
+ * + * @generated + */ +public class InformationLinkImpl extends MinimalEObjectImpl.Container implements InformationLink { + /** + * The cached value of the '{@link #getTo() To}' reference. + * + * + * @see #getTo() + * @generated + * @ordered + */ + protected FunctionalInput to; + + /** + * + * + * @generated + */ + protected InformationLinkImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return famPackage.Literals.INFORMATION_LINK; + } + + /** + * + * + * @generated + */ + public FunctionalOutput getFrom() { + if (eContainerFeatureID() != famPackage.INFORMATION_LINK__FROM) return null; + return (FunctionalOutput)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetFrom(FunctionalOutput newFrom, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newFrom, famPackage.INFORMATION_LINK__FROM, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setFrom(FunctionalOutput newFrom) { + if (newFrom != eInternalContainer() || (eContainerFeatureID() != famPackage.INFORMATION_LINK__FROM && newFrom != null)) { + if (EcoreUtil.isAncestor(this, newFrom)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newFrom != null) + msgs = ((InternalEObject)newFrom).eInverseAdd(this, famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS, FunctionalOutput.class, msgs); + msgs = basicSetFrom(newFrom, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.INFORMATION_LINK__FROM, newFrom, newFrom)); + } + + /** + * + * + * @generated + */ + public FunctionalInput getTo() { + if (to != null && to.eIsProxy()) { + InternalEObject oldTo = (InternalEObject)to; + to = (FunctionalInput)eResolveProxy(oldTo); + if (to != oldTo) { + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.RESOLVE, famPackage.INFORMATION_LINK__TO, oldTo, to)); + } + } + return to; + } + + /** + * + * + * @generated + */ + public FunctionalInput basicGetTo() { + return to; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetTo(FunctionalInput newTo, NotificationChain msgs) { + FunctionalInput oldTo = to; + to = newTo; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, famPackage.INFORMATION_LINK__TO, oldTo, newTo); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setTo(FunctionalInput newTo) { + if (newTo != to) { + NotificationChain msgs = null; + if (to != null) + msgs = ((InternalEObject)to).eInverseRemove(this, famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS, FunctionalInput.class, msgs); + if (newTo != null) + msgs = ((InternalEObject)newTo).eInverseAdd(this, famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS, FunctionalInput.class, msgs); + msgs = basicSetTo(newTo, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, famPackage.INFORMATION_LINK__TO, newTo, newTo)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetFrom((FunctionalOutput)otherEnd, msgs); + case famPackage.INFORMATION_LINK__TO: + if (to != null) + msgs = ((InternalEObject)to).eInverseRemove(this, famPackage.FUNCTIONAL_INPUT__INCOMING_LINKS, FunctionalInput.class, msgs); + return basicSetTo((FunctionalInput)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + return basicSetFrom(null, msgs); + case famPackage.INFORMATION_LINK__TO: + return basicSetTo(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case famPackage.INFORMATION_LINK__FROM: + return eInternalContainer().eInverseRemove(this, famPackage.FUNCTIONAL_OUTPUT__OUTGOING_LINKS, FunctionalOutput.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + return getFrom(); + case famPackage.INFORMATION_LINK__TO: + if (resolve) return getTo(); + return basicGetTo(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + setFrom((FunctionalOutput)newValue); + return; + case famPackage.INFORMATION_LINK__TO: + setTo((FunctionalInput)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + setFrom((FunctionalOutput)null); + return; + case famPackage.INFORMATION_LINK__TO: + setTo((FunctionalInput)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case famPackage.INFORMATION_LINK__FROM: + return getFrom() != null; + case famPackage.INFORMATION_LINK__TO: + return to != null; + } + return super.eIsSet(featureID); + } + +} //InformationLinkImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famFactoryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famFactoryImpl.java new file mode 100644 index 00000000..5c2a9c51 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famFactoryImpl.java @@ -0,0 +1,219 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.impl.EFactoryImpl; +import org.eclipse.emf.ecore.plugin.EcorePlugin; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famFactory; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +/** + * + * An implementation of the model Factory. + * + * @generated + */ +public class famFactoryImpl extends EFactoryImpl implements famFactory { + /** + * Creates the default factory implementation. + * + * + * @generated + */ + public static famFactory init() { + try { + famFactory thefamFactory = (famFactory)EPackage.Registry.INSTANCE.getEFactory(famPackage.eNS_URI); + if (thefamFactory != null) { + return thefamFactory; + } + } + catch (Exception exception) { + EcorePlugin.INSTANCE.log(exception); + } + return new famFactoryImpl(); + } + + /** + * Creates an instance of the factory. + * + * + * @generated + */ + public famFactoryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + public EObject create(EClass eClass) { + switch (eClass.getClassifierID()) { + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL: return createFunctionalArchitectureModel(); + case famPackage.FUNCTION: return createFunction(); + case famPackage.FAM_TERMINATOR: return createFAMTerminator(); + case famPackage.INFORMATION_LINK: return createInformationLink(); + case famPackage.FUNCTIONAL_INTERFACE: return createFunctionalInterface(); + case famPackage.FUNCTIONAL_INPUT: return createFunctionalInput(); + case famPackage.FUNCTIONAL_OUTPUT: return createFunctionalOutput(); + default: + throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + @Override + public Object createFromString(EDataType eDataType, String initialValue) { + switch (eDataType.getClassifierID()) { + case famPackage.FUNCTION_TYPE: + return createFunctionTypeFromString(eDataType, initialValue); + default: + throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + @Override + public String convertToString(EDataType eDataType, Object instanceValue) { + switch (eDataType.getClassifierID()) { + case famPackage.FUNCTION_TYPE: + return convertFunctionTypeToString(eDataType, instanceValue); + default: + throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + public FunctionalArchitectureModel createFunctionalArchitectureModel() { + FunctionalArchitectureModelImpl functionalArchitectureModel = new FunctionalArchitectureModelImpl(); + return functionalArchitectureModel; + } + + /** + * + * + * @generated + */ + public Function createFunction() { + FunctionImpl function = new FunctionImpl(); + return function; + } + + /** + * + * + * @generated + */ + public FAMTerminator createFAMTerminator() { + FAMTerminatorImpl famTerminator = new FAMTerminatorImpl(); + return famTerminator; + } + + /** + * + * + * @generated + */ + public InformationLink createInformationLink() { + InformationLinkImpl informationLink = new InformationLinkImpl(); + return informationLink; + } + + /** + * + * + * @generated + */ + public FunctionalInterface createFunctionalInterface() { + FunctionalInterfaceImpl functionalInterface = new FunctionalInterfaceImpl(); + return functionalInterface; + } + + /** + * + * + * @generated + */ + public FunctionalInput createFunctionalInput() { + FunctionalInputImpl functionalInput = new FunctionalInputImpl(); + return functionalInput; + } + + /** + * + * + * @generated + */ + public FunctionalOutput createFunctionalOutput() { + FunctionalOutputImpl functionalOutput = new FunctionalOutputImpl(); + return functionalOutput; + } + + /** + * + * + * @generated + */ + public FunctionType createFunctionTypeFromString(EDataType eDataType, String initialValue) { + FunctionType result = FunctionType.get(initialValue); + if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'"); + return result; + } + + /** + * + * + * @generated + */ + public String convertFunctionTypeToString(EDataType eDataType, Object instanceValue) { + return instanceValue == null ? null : instanceValue.toString(); + } + + /** + * + * + * @generated + */ + public famPackage getfamPackage() { + return (famPackage)getEPackage(); + } + + /** + * + * + * @deprecated + * @generated + */ + @Deprecated + public static famPackage getPackage() { + return famPackage.eINSTANCE; + } + +} //famFactoryImpl 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 new file mode 100644 index 00000000..74efeeeb --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java @@ -0,0 +1,574 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famFactory; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EEnum; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +import org.eclipse.emf.ecore.impl.EPackageImpl; + +/** + * + * An implementation of the model Package. + * + * @generated + */ +public class famPackageImpl extends EPackageImpl implements famPackage { + /** + * + * + * @generated + */ + private EClass functionalElementEClass = null; + + /** + * + * + * @generated + */ + private EClass functionalArchitectureModelEClass = null; + + /** + * + * + * @generated + */ + private EClass functionEClass = null; + + /** + * + * + * @generated + */ + private EClass famTerminatorEClass = null; + + /** + * + * + * @generated + */ + private EClass informationLinkEClass = null; + + /** + * + * + * @generated + */ + private EClass functionalInterfaceEClass = null; + + /** + * + * + * @generated + */ + private EClass functionalInputEClass = null; + + /** + * + * + * @generated + */ + private EClass functionalOutputEClass = null; + + /** + * + * + * @generated + */ + private EClass functionalDataEClass = null; + + /** + * + * + * @generated + */ + private EEnum functionTypeEEnum = null; + + /** + * Creates an instance of the model Package, registered with + * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package + * package URI value. + *

Note: the correct way to create the package is via the static + * factory method {@link #init init()}, which also performs + * initialization of the package, or returns the registered package, + * if one already exists. + * + * + * @see org.eclipse.emf.ecore.EPackage.Registry + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#eNS_URI + * @see #init() + * @generated + */ + private famPackageImpl() { + super(eNS_URI, famFactory.eINSTANCE); + } + + /** + * + * + * @generated + */ + private static boolean isInited = false; + + /** + * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. + * + *

This method is used to initialize {@link famPackage#eINSTANCE} when that field is accessed. + * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. + * + * + * @see #eNS_URI + * @see #createPackageContents() + * @see #initializePackageContents() + * @generated + */ + public static famPackage init() { + if (isInited) return (famPackage)EPackage.Registry.INSTANCE.getEPackage(famPackage.eNS_URI); + + // Obtain or create and register package + famPackageImpl thefamPackage = (famPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof famPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new famPackageImpl()); + + isInited = true; + + // Create package meta-data objects + thefamPackage.createPackageContents(); + + // Initialize created meta-data + thefamPackage.initializePackageContents(); + + // Mark meta-data to indicate it can't be changed + thefamPackage.freeze(); + + + // Update the registry and return the package + EPackage.Registry.INSTANCE.put(famPackage.eNS_URI, thefamPackage); + return thefamPackage; + } + + /** + * + * + * @generated + */ + public EClass getFunctionalElement() { + return functionalElementEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalElement_Interface() { + return (EReference)functionalElementEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getFunctionalElement_Model() { + return (EReference)functionalElementEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EReference getFunctionalElement_Parent() { + return (EReference)functionalElementEClass.getEStructuralFeatures().get(2); + } + + /** + * + * + * @generated + */ + public EClass getFunctionalArchitectureModel() { + return functionalArchitectureModelEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalArchitectureModel_RootElements() { + return (EReference)functionalArchitectureModelEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getFunction() { + return functionEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunction_SubElements() { + return (EReference)functionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EAttribute getFunction_Type() { + return (EAttribute)functionEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getFAMTerminator() { + return famTerminatorEClass; + } + + /** + * + * + * @generated + */ + public EReference getFAMTerminator_Data() { + return (EReference)famTerminatorEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getInformationLink() { + return informationLinkEClass; + } + + /** + * + * + * @generated + */ + public EReference getInformationLink_From() { + return (EReference)informationLinkEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getInformationLink_To() { + return (EReference)informationLinkEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getFunctionalInterface() { + return functionalInterfaceEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalInterface_Data() { + return (EReference)functionalInterfaceEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getFunctionalInterface_Element() { + return (EReference)functionalInterfaceEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getFunctionalInput() { + return functionalInputEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalInput_IncomingLinks() { + return (EReference)functionalInputEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getFunctionalOutput() { + return functionalOutputEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalOutput_OutgoingLinks() { + return (EReference)functionalOutputEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getFunctionalData() { + return functionalDataEClass; + } + + /** + * + * + * @generated + */ + public EReference getFunctionalData_Terminator() { + return (EReference)functionalDataEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getFunctionalData_Interface() { + return (EReference)functionalDataEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EEnum getFunctionType() { + return functionTypeEEnum; + } + + /** + * + * + * @generated + */ + public famFactory getfamFactory() { + return (famFactory)getEFactoryInstance(); + } + + /** + * + * + * @generated + */ + private boolean isCreated = false; + + /** + * Creates the meta-model objects for the package. This method is + * guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void createPackageContents() { + if (isCreated) return; + isCreated = true; + + // Create classes and their features + functionalElementEClass = createEClass(FUNCTIONAL_ELEMENT); + createEReference(functionalElementEClass, FUNCTIONAL_ELEMENT__INTERFACE); + createEReference(functionalElementEClass, FUNCTIONAL_ELEMENT__MODEL); + createEReference(functionalElementEClass, FUNCTIONAL_ELEMENT__PARENT); + + functionalArchitectureModelEClass = createEClass(FUNCTIONAL_ARCHITECTURE_MODEL); + createEReference(functionalArchitectureModelEClass, FUNCTIONAL_ARCHITECTURE_MODEL__ROOT_ELEMENTS); + + functionEClass = createEClass(FUNCTION); + createEReference(functionEClass, FUNCTION__SUB_ELEMENTS); + createEAttribute(functionEClass, FUNCTION__TYPE); + + famTerminatorEClass = createEClass(FAM_TERMINATOR); + createEReference(famTerminatorEClass, FAM_TERMINATOR__DATA); + + informationLinkEClass = createEClass(INFORMATION_LINK); + createEReference(informationLinkEClass, INFORMATION_LINK__FROM); + createEReference(informationLinkEClass, INFORMATION_LINK__TO); + + functionalInterfaceEClass = createEClass(FUNCTIONAL_INTERFACE); + createEReference(functionalInterfaceEClass, FUNCTIONAL_INTERFACE__DATA); + createEReference(functionalInterfaceEClass, FUNCTIONAL_INTERFACE__ELEMENT); + + functionalInputEClass = createEClass(FUNCTIONAL_INPUT); + createEReference(functionalInputEClass, FUNCTIONAL_INPUT__INCOMING_LINKS); + + functionalOutputEClass = createEClass(FUNCTIONAL_OUTPUT); + createEReference(functionalOutputEClass, FUNCTIONAL_OUTPUT__OUTGOING_LINKS); + + functionalDataEClass = createEClass(FUNCTIONAL_DATA); + createEReference(functionalDataEClass, FUNCTIONAL_DATA__TERMINATOR); + createEReference(functionalDataEClass, FUNCTIONAL_DATA__INTERFACE); + + // Create enums + functionTypeEEnum = createEEnum(FUNCTION_TYPE); + } + + /** + * + * + * @generated + */ + private boolean isInitialized = false; + + /** + * Complete the initialization of the package and its meta-model. This + * method is guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void initializePackageContents() { + if (isInitialized) return; + isInitialized = true; + + // Initialize package + setName(eNAME); + setNsPrefix(eNS_PREFIX); + setNsURI(eNS_URI); + + // Create type parameters + + // Set bounds for type parameters + + // Add supertypes to classes + functionEClass.getESuperTypes().add(this.getFunctionalElement()); + functionalInputEClass.getESuperTypes().add(this.getFunctionalData()); + functionalOutputEClass.getESuperTypes().add(this.getFunctionalData()); + + // Initialize classes, features, and operations; add parameters + initEClass(functionalElementEClass, FunctionalElement.class, "FunctionalElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalElement_Interface(), this.getFunctionalInterface(), this.getFunctionalInterface_Element(), "interface", null, 0, 1, FunctionalElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getFunctionalElement_Model(), this.getFunctionalArchitectureModel(), null, "model", null, 1, 1, FunctionalElement.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED); + initEReference(getFunctionalElement_Parent(), this.getFunction(), this.getFunction_SubElements(), "parent", null, 0, 1, FunctionalElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionalArchitectureModelEClass, FunctionalArchitectureModel.class, "FunctionalArchitectureModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalArchitectureModel_RootElements(), this.getFunctionalElement(), null, "rootElements", null, 0, -1, FunctionalArchitectureModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionEClass, Function.class, "Function", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunction_SubElements(), this.getFunctionalElement(), this.getFunctionalElement_Parent(), "subElements", null, 0, -1, Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getFunction_Type(), this.getFunctionType(), "type", null, 1, 1, Function.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, IS_DERIVED, IS_ORDERED); + + initEClass(famTerminatorEClass, FAMTerminator.class, "FAMTerminator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFAMTerminator_Data(), this.getFunctionalData(), this.getFunctionalData_Terminator(), "data", null, 0, 1, FAMTerminator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(informationLinkEClass, InformationLink.class, "InformationLink", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getInformationLink_From(), this.getFunctionalOutput(), this.getFunctionalOutput_OutgoingLinks(), "from", null, 0, 1, InformationLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getInformationLink_To(), this.getFunctionalInput(), this.getFunctionalInput_IncomingLinks(), "to", null, 1, 1, InformationLink.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionalInterfaceEClass, FunctionalInterface.class, "FunctionalInterface", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalInterface_Data(), this.getFunctionalData(), this.getFunctionalData_Interface(), "data", null, 0, -1, FunctionalInterface.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getFunctionalInterface_Element(), this.getFunctionalElement(), this.getFunctionalElement_Interface(), "element", null, 0, 1, FunctionalInterface.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionalInputEClass, FunctionalInput.class, "FunctionalInput", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalInput_IncomingLinks(), this.getInformationLink(), this.getInformationLink_To(), "IncomingLinks", null, 0, -1, FunctionalInput.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionalOutputEClass, FunctionalOutput.class, "FunctionalOutput", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalOutput_OutgoingLinks(), this.getInformationLink(), this.getInformationLink_From(), "outgoingLinks", null, 0, -1, FunctionalOutput.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(functionalDataEClass, FunctionalData.class, "FunctionalData", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFunctionalData_Terminator(), this.getFAMTerminator(), this.getFAMTerminator_Data(), "terminator", null, 0, 1, FunctionalData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getFunctionalData_Interface(), this.getFunctionalInterface(), this.getFunctionalInterface_Data(), "interface", null, 0, 1, FunctionalData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + // Initialize enums and add enum literals + initEEnum(functionTypeEEnum, FunctionType.class, "FunctionType"); + addEEnumLiteral(functionTypeEEnum, FunctionType.ROOT); + addEEnumLiteral(functionTypeEEnum, FunctionType.INTERMEDIATE); + addEEnumLiteral(functionTypeEEnum, FunctionType.LEAF); + + // Create resource + createResource(eNS_URI); + + // Create annotations + // http://www.eclipse.org/emf/2002/Ecore + createEcoreAnnotations(); + // org.eclipse.viatra.query.querybasedfeature + createOrgAnnotations(); + } + + /** + * Initializes the annotations for http://www.eclipse.org/emf/2002/Ecore. + * + * + * @generated + */ + protected void createEcoreAnnotations() { + String source = "http://www.eclipse.org/emf/2002/Ecore"; + addAnnotation + (this, + source, + new String[] { + "settingDelegates", "org.eclipse.viatra.query.querybasedfeature" + }); + } + + /** + * Initializes the annotations for org.eclipse.viatra.query.querybasedfeature. + * + * + * @generated + */ + protected void createOrgAnnotations() { + String source = "org.eclipse.viatra.query.querybasedfeature"; + addAnnotation + (getFunctionalElement_Model(), + source, + new String[] { + "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model" + }); + addAnnotation + (getFunction_Type(), + source, + new String[] { + "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type" + }); + } + +} //famPackageImpl 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql new file mode 100644 index 00000000..02d34dcd --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql @@ -0,0 +1,103 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries + +import "FamMetamodel" + +@Constraint(message="terminatorAndInformation", severity="error", key={T}) +pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { + FunctionalOutput.outgoingLinks(Out,I); + FunctionalOutput.terminator(Out,T); +} or { + InformationLink.to(I,In); + FunctionalInput.terminator(In,T); +} + +@QueryBasedFeature +pattern type(This : Function, Target : FunctionType) = { + find rootElements(_Model, This); + Target == FunctionType::Root; +} or { + neg find parent(_Child, This); + neg find rootElements(_Model, This); + Target == FunctionType::Leaf; +} or { + find parent(This, _Par); + find parent(_Child, This); + Target == FunctionType::Intermediate; +} + +pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = { + FunctionalArchitectureModel.rootElements(Model, Root); +} + +pattern parent(Func : Function, Par : Function) = { + Function.parent(Func, Par); +} + +@QueryBasedFeature +pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) { + FunctionalElement(This); + FunctionalArchitectureModel(Target); +} + +/* +@Constraint(message="noRoot", severity="error", key={fam}) +pattern noRoot(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasRoot(_); +} +@Constraint(message="noIntermediate", severity="error", key={fam}) +pattern noInt(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasInt(_); +} +@Constraint(message="noLeaf", severity="error", key={fam}) +pattern noLeaf(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasLeaf(_); +} +*/ + +/* +@QueryBasedFeature +pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = { + find parent+(This, Parent); + find rootElements(Target, Parent); +} or { + find rootElements(Target, This); +} + +pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = { + FunctionalInterface.data(FI, FD); +} + +@QueryBasedFeature +pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.outputs(This, Output); + InformationLink.from(Target, Output); +} + +@QueryBasedFeature +pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.inputs(This, Input); + InformationLink.to(Target, Input); +} + +@QueryBasedFeature +pattern connects(This : FunctionalElement, Target : FunctionalElement) = { + FunctionalElement.outgoingLinks(This,Link); + FunctionalElement.incomingLinks(Target,Link); +}*/ + +/*pattern frequency(a: Function, b : EInt) { + Function.minimumFrequency(a,b); +}*/ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famAdapterFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famAdapterFactory.java new file mode 100644 index 00000000..b5a4e37b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famAdapterFactory.java @@ -0,0 +1,271 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.util; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; +import org.eclipse.emf.ecore.EObject; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +/** + * + * The Adapter Factory for the model. + * It provides an adapter createXXX method for each class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage + * @generated + */ +public class famAdapterFactory extends AdapterFactoryImpl { + /** + * The cached model package. + * + * + * @generated + */ + protected static famPackage modelPackage; + + /** + * Creates an instance of the adapter factory. + * + * + * @generated + */ + public famAdapterFactory() { + if (modelPackage == null) { + modelPackage = famPackage.eINSTANCE; + } + } + + /** + * Returns whether this factory is applicable for the type of the object. + * + * This implementation returns true if the object is either the model's package or is an instance object of the model. + * + * @return whether this factory is applicable for the type of the object. + * @generated + */ + @Override + public boolean isFactoryForType(Object object) { + if (object == modelPackage) { + return true; + } + if (object instanceof EObject) { + return ((EObject)object).eClass().getEPackage() == modelPackage; + } + return false; + } + + /** + * The switch that delegates to the createXXX methods. + * + * + * @generated + */ + protected famSwitch modelSwitch = + new famSwitch() { + @Override + public Adapter caseFunctionalElement(FunctionalElement object) { + return createFunctionalElementAdapter(); + } + @Override + public Adapter caseFunctionalArchitectureModel(FunctionalArchitectureModel object) { + return createFunctionalArchitectureModelAdapter(); + } + @Override + public Adapter caseFunction(Function object) { + return createFunctionAdapter(); + } + @Override + public Adapter caseFAMTerminator(FAMTerminator object) { + return createFAMTerminatorAdapter(); + } + @Override + public Adapter caseInformationLink(InformationLink object) { + return createInformationLinkAdapter(); + } + @Override + public Adapter caseFunctionalInterface(FunctionalInterface object) { + return createFunctionalInterfaceAdapter(); + } + @Override + public Adapter caseFunctionalInput(FunctionalInput object) { + return createFunctionalInputAdapter(); + } + @Override + public Adapter caseFunctionalOutput(FunctionalOutput object) { + return createFunctionalOutputAdapter(); + } + @Override + public Adapter caseFunctionalData(FunctionalData object) { + return createFunctionalDataAdapter(); + } + @Override + public Adapter defaultCase(EObject object) { + return createEObjectAdapter(); + } + }; + + /** + * Creates an adapter for the target. + * + * + * @param target the object to adapt. + * @return the adapter for the target. + * @generated + */ + @Override + public Adapter createAdapter(Notifier target) { + return modelSwitch.doSwitch((EObject)target); + } + + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement Functional Element}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement + * @generated + */ + public Adapter createFunctionalElementAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel Functional Architecture Model}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel + * @generated + */ + public Adapter createFunctionalArchitectureModelAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function Function}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function + * @generated + */ + public Adapter createFunctionAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator FAM Terminator}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator + * @generated + */ + public Adapter createFAMTerminatorAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink Information Link}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink + * @generated + */ + public Adapter createInformationLinkAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface Functional Interface}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface + * @generated + */ + public Adapter createFunctionalInterfaceAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput Functional Input}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput + * @generated + */ + public Adapter createFunctionalInputAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput Functional Output}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput + * @generated + */ + public Adapter createFunctionalOutputAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData Functional Data}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData + * @generated + */ + public Adapter createFunctionalDataAdapter() { + return null; + } + + /** + * Creates a new adapter for the default case. + * + * This default implementation returns null. + * + * @return the new adapter. + * @generated + */ + public Adapter createEObjectAdapter() { + return null; + } + +} //famAdapterFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famSwitch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famSwitch.java new file mode 100644 index 00000000..979bd3e9 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/util/famSwitch.java @@ -0,0 +1,289 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.util; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.util.Switch; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalArchitectureModel; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalData; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalInterface; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionalOutput; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage; + +/** + * + * The Switch for the model's inheritance hierarchy. + * It supports the call {@link #doSwitch(EObject) doSwitch(object)} + * to invoke the caseXXX method for each class of the model, + * starting with the actual class of the object + * and proceeding up the inheritance hierarchy + * until a non-null result is returned, + * which is the result of the switch. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage + * @generated + */ +public class famSwitch extends Switch { + /** + * The cached model package + * + * + * @generated + */ + protected static famPackage modelPackage; + + /** + * Creates an instance of the switch. + * + * + * @generated + */ + public famSwitch() { + if (modelPackage == null) { + modelPackage = famPackage.eINSTANCE; + } + } + + /** + * Checks whether this is a switch for the given package. + * + * + * @param ePackage the package in question. + * @return whether this is a switch for the given package. + * @generated + */ + @Override + protected boolean isSwitchFor(EPackage ePackage) { + return ePackage == modelPackage; + } + + /** + * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. + * + * + * @return the first non-null result returned by a caseXXX call. + * @generated + */ + @Override + protected T doSwitch(int classifierID, EObject theEObject) { + switch (classifierID) { + case famPackage.FUNCTIONAL_ELEMENT: { + FunctionalElement functionalElement = (FunctionalElement)theEObject; + T result = caseFunctionalElement(functionalElement); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTIONAL_ARCHITECTURE_MODEL: { + FunctionalArchitectureModel functionalArchitectureModel = (FunctionalArchitectureModel)theEObject; + T result = caseFunctionalArchitectureModel(functionalArchitectureModel); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTION: { + Function function = (Function)theEObject; + T result = caseFunction(function); + if (result == null) result = caseFunctionalElement(function); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FAM_TERMINATOR: { + FAMTerminator famTerminator = (FAMTerminator)theEObject; + T result = caseFAMTerminator(famTerminator); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.INFORMATION_LINK: { + InformationLink informationLink = (InformationLink)theEObject; + T result = caseInformationLink(informationLink); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTIONAL_INTERFACE: { + FunctionalInterface functionalInterface = (FunctionalInterface)theEObject; + T result = caseFunctionalInterface(functionalInterface); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTIONAL_INPUT: { + FunctionalInput functionalInput = (FunctionalInput)theEObject; + T result = caseFunctionalInput(functionalInput); + if (result == null) result = caseFunctionalData(functionalInput); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTIONAL_OUTPUT: { + FunctionalOutput functionalOutput = (FunctionalOutput)theEObject; + T result = caseFunctionalOutput(functionalOutput); + if (result == null) result = caseFunctionalData(functionalOutput); + if (result == null) result = defaultCase(theEObject); + return result; + } + case famPackage.FUNCTIONAL_DATA: { + FunctionalData functionalData = (FunctionalData)theEObject; + T result = caseFunctionalData(functionalData); + if (result == null) result = defaultCase(theEObject); + return result; + } + default: return defaultCase(theEObject); + } + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Element'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Element'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalElement(FunctionalElement object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Architecture Model'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Architecture Model'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalArchitectureModel(FunctionalArchitectureModel object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Function'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Function'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunction(Function object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'FAM Terminator'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'FAM Terminator'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFAMTerminator(FAMTerminator object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Information Link'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Information Link'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseInformationLink(InformationLink object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Interface'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Interface'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalInterface(FunctionalInterface object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Input'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Input'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalInput(FunctionalInput object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Output'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Output'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalOutput(FunctionalOutput object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Functional Data'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Functional Data'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFunctionalData(FunctionalData object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'EObject'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch, but this is the last case anyway. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'EObject'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) + * @generated + */ + @Override + public T defaultCase(EObject object) { + return null; + } + +} //famSwitch diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Dir.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Dir.java new file mode 100644 index 00000000..03290097 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Dir.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.common.util.EList; + +/** + * + * A representation of the model object 'Dir'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir#getContents Contents}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getDir() + * @model + * @generated + */ +public interface Dir extends FSObject { + /** + * Returns the value of the 'Contents' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent Parent}'. + * + *

+ * If the meaning of the 'Contents' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Contents' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getDir_Contents() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent + * @model opposite="parent" containment="true" + * @generated + */ + EList getContents(); + +} // Dir diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FSObject.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FSObject.java new file mode 100644 index 00000000..87e4e4df --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FSObject.java @@ -0,0 +1,52 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'FS Object'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent Parent}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFSObject() + * @model abstract="true" + * @generated + */ +public interface FSObject extends EObject { + /** + * Returns the value of the 'Parent' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir#getContents Contents}'. + * + *

+ * If the meaning of the 'Parent' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Parent' container reference. + * @see #setParent(Dir) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFSObject_Parent() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir#getContents + * @model opposite="contents" transient="false" + * @generated + */ + Dir getParent(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent Parent}' container reference. + * + * + * @param value the new value of the 'Parent' container reference. + * @see #getParent() + * @generated + */ + void setParent(Dir value); + +} // FSObject diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/File.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/File.java new file mode 100644 index 00000000..f829076c --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/File.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + + +/** + * + * A representation of the model object 'File'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFile() + * @model + * @generated + */ +public interface File extends FSObject { +} // File diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java new file mode 100644 index 00000000..c1c75043 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java @@ -0,0 +1,70 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'File System'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getRoot Root}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getLive Live}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFileSystem() + * @model + * @generated + */ +public interface FileSystem extends EObject { + /** + * Returns the value of the 'Root' containment reference. + * + *

+ * If the meaning of the 'Root' containment reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Root' containment reference. + * @see #setRoot(Dir) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFileSystem_Root() + * @model containment="true" required="true" + * @generated + */ + Dir getRoot(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getRoot Root}' containment reference. + * + * + * @param value the new value of the 'Root' containment reference. + * @see #getRoot() + * @generated + */ + void setRoot(Dir value); + + /** + * Returns the value of the 'Live' reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject}. + * + *

+ * If the meaning of the 'Live' reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Live' reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFileSystem_Live() + * @model transient="true" changeable="false" volatile="true" derived="true" + * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='hu.bme.mit.inf.dslreasoner.domains.alloyexamples.live'" + * @generated + */ + EList getLive(); + +} // FileSystem diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Model.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Model.java new file mode 100644 index 00000000..e75bd41a --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/Model.java @@ -0,0 +1,69 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Model'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getFilesystems Filesystems}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getOtherFSObjects Other FS Objects}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getModel() + * @model + * @generated + */ +public interface Model extends EObject { + /** + * Returns the value of the 'Filesystems' containment reference. + * + *

+ * If the meaning of the 'Filesystems' containment reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Filesystems' containment reference. + * @see #setFilesystems(FileSystem) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getModel_Filesystems() + * @model containment="true" required="true" + * @generated + */ + FileSystem getFilesystems(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getFilesystems Filesystems}' containment reference. + * + * + * @param value the new value of the 'Filesystems' containment reference. + * @see #getFilesystems() + * @generated + */ + void setFilesystems(FileSystem value); + + /** + * Returns the value of the 'Other FS Objects' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject}. + * + *

+ * If the meaning of the 'Other FS Objects' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Other FS Objects' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getModel_OtherFSObjects() + * @model containment="true" + * @generated + */ + EList getOtherFSObjects(); + +} // Model diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemFactory.java new file mode 100644 index 00000000..401becfb --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemFactory.java @@ -0,0 +1,69 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.ecore.EFactory; + +/** + * + * The Factory for the model. + * It provides a create method for each non-abstract class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage + * @generated + */ +public interface filesystemFactory extends EFactory { + /** + * The singleton instance of the factory. + * + * + * @generated + */ + filesystemFactory eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.init(); + + /** + * Returns a new object of class 'File System'. + * + * + * @return a new object of class 'File System'. + * @generated + */ + FileSystem createFileSystem(); + + /** + * Returns a new object of class 'Dir'. + * + * + * @return a new object of class 'Dir'. + * @generated + */ + Dir createDir(); + + /** + * Returns a new object of class 'File'. + * + * + * @return a new object of class 'File'. + * @generated + */ + File createFile(); + + /** + * Returns a new object of class 'Model'. + * + * + * @return a new object of class 'Model'. + * @generated + */ + Model createModel(); + + /** + * Returns the package supported by this factory. + * + * + * @return the package supported by this factory. + * @generated + */ + filesystemPackage getfilesystemPackage(); + +} //filesystemFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemPackage.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemPackage.java new file mode 100644 index 00000000..08133f96 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/filesystemPackage.java @@ -0,0 +1,511 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +/** + * + * The Package for the model. + * It contains accessors for the meta objects to represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemFactory + * @model kind="package" + * annotation="http://www.eclipse.org/emf/2002/Ecore settingDelegates='org.eclipse.viatra.query.querybasedfeature'" + * @generated + */ +public interface filesystemPackage extends EPackage { + /** + * The package name. + * + * + * @generated + */ + String eNAME = "filesystem"; + + /** + * The package namespace URI. + * + * + * @generated + */ + String eNS_URI = "FileSystemMetamodel"; + + /** + * The package namespace name. + * + * + * @generated + */ + String eNS_PREFIX = "filesystem"; + + /** + * The singleton instance of the package. + * + * + * @generated + */ + filesystemPackage eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl.init(); + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl File System}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFileSystem() + * @generated + */ + int FILE_SYSTEM = 0; + + /** + * The feature id for the 'Root' containment reference. + * + * + * @generated + * @ordered + */ + int FILE_SYSTEM__ROOT = 0; + + /** + * The feature id for the 'Live' reference list. + * + * + * @generated + * @ordered + */ + int FILE_SYSTEM__LIVE = 1; + + /** + * The number of structural features of the 'File System' class. + * + * + * @generated + * @ordered + */ + int FILE_SYSTEM_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'File System' class. + * + * + * @generated + * @ordered + */ + int FILE_SYSTEM_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FSObjectImpl FS Object}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FSObjectImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFSObject() + * @generated + */ + int FS_OBJECT = 1; + + /** + * The feature id for the 'Parent' container reference. + * + * + * @generated + * @ordered + */ + int FS_OBJECT__PARENT = 0; + + /** + * The number of structural features of the 'FS Object' class. + * + * + * @generated + * @ordered + */ + int FS_OBJECT_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'FS Object' class. + * + * + * @generated + * @ordered + */ + int FS_OBJECT_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.DirImpl Dir}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.DirImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getDir() + * @generated + */ + int DIR = 2; + + /** + * The feature id for the 'Parent' container reference. + * + * + * @generated + * @ordered + */ + int DIR__PARENT = FS_OBJECT__PARENT; + + /** + * The feature id for the 'Contents' containment reference list. + * + * + * @generated + * @ordered + */ + int DIR__CONTENTS = FS_OBJECT_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'Dir' class. + * + * + * @generated + * @ordered + */ + int DIR_FEATURE_COUNT = FS_OBJECT_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'Dir' class. + * + * + * @generated + * @ordered + */ + int DIR_OPERATION_COUNT = FS_OBJECT_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileImpl File}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFile() + * @generated + */ + int FILE = 3; + + /** + * The feature id for the 'Parent' container reference. + * + * + * @generated + * @ordered + */ + int FILE__PARENT = FS_OBJECT__PARENT; + + /** + * The number of structural features of the 'File' class. + * + * + * @generated + * @ordered + */ + int FILE_FEATURE_COUNT = FS_OBJECT_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'File' class. + * + * + * @generated + * @ordered + */ + int FILE_OPERATION_COUNT = FS_OBJECT_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl Model}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getModel() + * @generated + */ + int MODEL = 4; + + /** + * The feature id for the 'Filesystems' containment reference. + * + * + * @generated + * @ordered + */ + int MODEL__FILESYSTEMS = 0; + + /** + * The feature id for the 'Other FS Objects' containment reference list. + * + * + * @generated + * @ordered + */ + int MODEL__OTHER_FS_OBJECTS = 1; + + /** + * The number of structural features of the 'Model' class. + * + * + * @generated + * @ordered + */ + int MODEL_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Model' class. + * + * + * @generated + * @ordered + */ + int MODEL_OPERATION_COUNT = 0; + + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem File System}'. + * + * + * @return the meta object for class 'File System'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem + * @generated + */ + EClass getFileSystem(); + + /** + * Returns the meta object for the containment reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getRoot Root}'. + * + * + * @return the meta object for the containment reference 'Root'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getRoot() + * @see #getFileSystem() + * @generated + */ + EReference getFileSystem_Root(); + + /** + * Returns the meta object for the reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getLive Live}'. + * + * + * @return the meta object for the reference list 'Live'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem#getLive() + * @see #getFileSystem() + * @generated + */ + EReference getFileSystem_Live(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject FS Object}'. + * + * + * @return the meta object for class 'FS Object'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject + * @generated + */ + EClass getFSObject(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent Parent}'. + * + * + * @return the meta object for the container reference 'Parent'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject#getParent() + * @see #getFSObject() + * @generated + */ + EReference getFSObject_Parent(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir Dir}'. + * + * + * @return the meta object for class 'Dir'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir + * @generated + */ + EClass getDir(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir#getContents Contents}'. + * + * + * @return the meta object for the containment reference list 'Contents'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir#getContents() + * @see #getDir() + * @generated + */ + EReference getDir_Contents(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File File}'. + * + * + * @return the meta object for class 'File'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File + * @generated + */ + EClass getFile(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model Model}'. + * + * + * @return the meta object for class 'Model'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model + * @generated + */ + EClass getModel(); + + /** + * Returns the meta object for the containment reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getFilesystems Filesystems}'. + * + * + * @return the meta object for the containment reference 'Filesystems'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getFilesystems() + * @see #getModel() + * @generated + */ + EReference getModel_Filesystems(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getOtherFSObjects Other FS Objects}'. + * + * + * @return the meta object for the containment reference list 'Other FS Objects'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model#getOtherFSObjects() + * @see #getModel() + * @generated + */ + EReference getModel_OtherFSObjects(); + + /** + * Returns the factory that creates the instances of the model. + * + * + * @return the factory that creates the instances of the model. + * @generated + */ + filesystemFactory getfilesystemFactory(); + + /** + * + * Defines literals for the meta objects that represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @generated + */ + interface Literals { + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl File System}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFileSystem() + * @generated + */ + EClass FILE_SYSTEM = eINSTANCE.getFileSystem(); + + /** + * The meta object literal for the 'Root' containment reference feature. + * + * + * @generated + */ + EReference FILE_SYSTEM__ROOT = eINSTANCE.getFileSystem_Root(); + + /** + * The meta object literal for the 'Live' reference list feature. + * + * + * @generated + */ + EReference FILE_SYSTEM__LIVE = eINSTANCE.getFileSystem_Live(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FSObjectImpl FS Object}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FSObjectImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFSObject() + * @generated + */ + EClass FS_OBJECT = eINSTANCE.getFSObject(); + + /** + * The meta object literal for the 'Parent' container reference feature. + * + * + * @generated + */ + EReference FS_OBJECT__PARENT = eINSTANCE.getFSObject_Parent(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.DirImpl Dir}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.DirImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getDir() + * @generated + */ + EClass DIR = eINSTANCE.getDir(); + + /** + * The meta object literal for the 'Contents' containment reference list feature. + * + * + * @generated + */ + EReference DIR__CONTENTS = eINSTANCE.getDir_Contents(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileImpl File}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getFile() + * @generated + */ + EClass FILE = eINSTANCE.getFile(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl Model}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemPackageImpl#getModel() + * @generated + */ + EClass MODEL = eINSTANCE.getModel(); + + /** + * The meta object literal for the 'Filesystems' containment reference feature. + * + * + * @generated + */ + EReference MODEL__FILESYSTEMS = eINSTANCE.getModel_Filesystems(); + + /** + * The meta object literal for the 'Other FS Objects' containment reference list feature. + * + * + * @generated + */ + EReference MODEL__OTHER_FS_OBJECTS = eINSTANCE.getModel_OtherFSObjects(); + + } + +} //filesystemPackage diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/DirImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/DirImpl.java new file mode 100644 index 00000000..2e2fbcba --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/DirImpl.java @@ -0,0 +1,165 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Dir'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.DirImpl#getContents Contents}
  • + *
+ * + * @generated + */ +public class DirImpl extends FSObjectImpl implements Dir { + /** + * The cached value of the '{@link #getContents() Contents}' containment reference list. + * + * + * @see #getContents() + * @generated + * @ordered + */ + protected EList contents; + + /** + * + * + * @generated + */ + protected DirImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return filesystemPackage.Literals.DIR; + } + + /** + * + * + * @generated + */ + public EList getContents() { + if (contents == null) { + contents = new EObjectContainmentWithInverseEList(FSObject.class, this, filesystemPackage.DIR__CONTENTS, filesystemPackage.FS_OBJECT__PARENT); + } + return contents; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + return ((InternalEList)(InternalEList)getContents()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + return ((InternalEList)getContents()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + return getContents(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + getContents().clear(); + getContents().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + getContents().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case filesystemPackage.DIR__CONTENTS: + return contents != null && !contents.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //DirImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FSObjectImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FSObjectImpl.java new file mode 100644 index 00000000..25ea1fbb --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FSObjectImpl.java @@ -0,0 +1,196 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'FS Object'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FSObjectImpl#getParent Parent}
  • + *
+ * + * @generated + */ +public abstract class FSObjectImpl extends MinimalEObjectImpl.Container implements FSObject { + /** + * + * + * @generated + */ + protected FSObjectImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return filesystemPackage.Literals.FS_OBJECT; + } + + /** + * + * + * @generated + */ + public Dir getParent() { + if (eContainerFeatureID() != filesystemPackage.FS_OBJECT__PARENT) return null; + return (Dir)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetParent(Dir newParent, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newParent, filesystemPackage.FS_OBJECT__PARENT, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setParent(Dir newParent) { + if (newParent != eInternalContainer() || (eContainerFeatureID() != filesystemPackage.FS_OBJECT__PARENT && newParent != null)) { + if (EcoreUtil.isAncestor(this, newParent)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newParent != null) + msgs = ((InternalEObject)newParent).eInverseAdd(this, filesystemPackage.DIR__CONTENTS, Dir.class, msgs); + msgs = basicSetParent(newParent, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, filesystemPackage.FS_OBJECT__PARENT, newParent, newParent)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetParent((Dir)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + return basicSetParent(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case filesystemPackage.FS_OBJECT__PARENT: + return eInternalContainer().eInverseRemove(this, filesystemPackage.DIR__CONTENTS, Dir.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + return getParent(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + setParent((Dir)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + setParent((Dir)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case filesystemPackage.FS_OBJECT__PARENT: + return getParent() != null; + } + return super.eIsSet(featureID); + } + +} //FSObjectImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileImpl.java new file mode 100644 index 00000000..29eb47fd --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'File'. + * + * + * @generated + */ +public class FileImpl extends FSObjectImpl implements File { + /** + * + * + * @generated + */ + protected FileImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return filesystemPackage.Literals.FILE; + } + +} //FileImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java new file mode 100644 index 00000000..8bbc6a74 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java @@ -0,0 +1,205 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +/** + * + * An implementation of the model object 'File System'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl#getRoot Root}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl#getLive Live}
  • + *
+ * + * @generated + */ +public class FileSystemImpl extends MinimalEObjectImpl.Container implements FileSystem { + /** + * The cached value of the '{@link #getRoot() Root}' containment reference. + * + * + * @see #getRoot() + * @generated + * @ordered + */ + protected Dir root; + + /** + * The cached setting delegate for the '{@link #getLive() Live}' reference list. + * + * + * @see #getLive() + * @generated + * @ordered + */ + protected EStructuralFeature.Internal.SettingDelegate LIVE__ESETTING_DELEGATE = ((EStructuralFeature.Internal)filesystemPackage.Literals.FILE_SYSTEM__LIVE).getSettingDelegate(); + + /** + * + * + * @generated + */ + protected FileSystemImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return filesystemPackage.Literals.FILE_SYSTEM; + } + + /** + * + * + * @generated + */ + public Dir getRoot() { + return root; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetRoot(Dir newRoot, NotificationChain msgs) { + Dir oldRoot = root; + root = newRoot; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, filesystemPackage.FILE_SYSTEM__ROOT, oldRoot, newRoot); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setRoot(Dir newRoot) { + if (newRoot != root) { + NotificationChain msgs = null; + if (root != null) + msgs = ((InternalEObject)root).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - filesystemPackage.FILE_SYSTEM__ROOT, null, msgs); + if (newRoot != null) + msgs = ((InternalEObject)newRoot).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - filesystemPackage.FILE_SYSTEM__ROOT, null, msgs); + msgs = basicSetRoot(newRoot, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, filesystemPackage.FILE_SYSTEM__ROOT, newRoot, newRoot)); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + public EList getLive() { + return (EList)LIVE__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.FILE_SYSTEM__ROOT: + return basicSetRoot(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case filesystemPackage.FILE_SYSTEM__ROOT: + return getRoot(); + case filesystemPackage.FILE_SYSTEM__LIVE: + return getLive(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case filesystemPackage.FILE_SYSTEM__ROOT: + setRoot((Dir)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case filesystemPackage.FILE_SYSTEM__ROOT: + setRoot((Dir)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case filesystemPackage.FILE_SYSTEM__ROOT: + return root != null; + case filesystemPackage.FILE_SYSTEM__LIVE: + return LIVE__ESETTING_DELEGATE.dynamicIsSet(this, null, 0); + } + return super.eIsSet(featureID); + } + +} //FileSystemImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/ModelImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/ModelImpl.java new file mode 100644 index 00000000..a21f5b6e --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/ModelImpl.java @@ -0,0 +1,221 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Model'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl#getFilesystems Filesystems}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.ModelImpl#getOtherFSObjects Other FS Objects}
  • + *
+ * + * @generated + */ +public class ModelImpl extends MinimalEObjectImpl.Container implements Model { + /** + * The cached value of the '{@link #getFilesystems() Filesystems}' containment reference. + * + * + * @see #getFilesystems() + * @generated + * @ordered + */ + protected FileSystem filesystems; + + /** + * The cached value of the '{@link #getOtherFSObjects() Other FS Objects}' containment reference list. + * + * + * @see #getOtherFSObjects() + * @generated + * @ordered + */ + protected EList otherFSObjects; + + /** + * + * + * @generated + */ + protected ModelImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return filesystemPackage.Literals.MODEL; + } + + /** + * + * + * @generated + */ + public FileSystem getFilesystems() { + return filesystems; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetFilesystems(FileSystem newFilesystems, NotificationChain msgs) { + FileSystem oldFilesystems = filesystems; + filesystems = newFilesystems; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, filesystemPackage.MODEL__FILESYSTEMS, oldFilesystems, newFilesystems); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setFilesystems(FileSystem newFilesystems) { + if (newFilesystems != filesystems) { + NotificationChain msgs = null; + if (filesystems != null) + msgs = ((InternalEObject)filesystems).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - filesystemPackage.MODEL__FILESYSTEMS, null, msgs); + if (newFilesystems != null) + msgs = ((InternalEObject)newFilesystems).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - filesystemPackage.MODEL__FILESYSTEMS, null, msgs); + msgs = basicSetFilesystems(newFilesystems, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, filesystemPackage.MODEL__FILESYSTEMS, newFilesystems, newFilesystems)); + } + + /** + * + * + * @generated + */ + public EList getOtherFSObjects() { + if (otherFSObjects == null) { + otherFSObjects = new EObjectContainmentEList(FSObject.class, this, filesystemPackage.MODEL__OTHER_FS_OBJECTS); + } + return otherFSObjects; + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case filesystemPackage.MODEL__FILESYSTEMS: + return basicSetFilesystems(null, msgs); + case filesystemPackage.MODEL__OTHER_FS_OBJECTS: + return ((InternalEList)getOtherFSObjects()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case filesystemPackage.MODEL__FILESYSTEMS: + return getFilesystems(); + case filesystemPackage.MODEL__OTHER_FS_OBJECTS: + return getOtherFSObjects(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case filesystemPackage.MODEL__FILESYSTEMS: + setFilesystems((FileSystem)newValue); + return; + case filesystemPackage.MODEL__OTHER_FS_OBJECTS: + getOtherFSObjects().clear(); + getOtherFSObjects().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case filesystemPackage.MODEL__FILESYSTEMS: + setFilesystems((FileSystem)null); + return; + case filesystemPackage.MODEL__OTHER_FS_OBJECTS: + getOtherFSObjects().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case filesystemPackage.MODEL__FILESYSTEMS: + return filesystems != null; + case filesystemPackage.MODEL__OTHER_FS_OBJECTS: + return otherFSObjects != null && !otherFSObjects.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //ModelImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemFactoryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemFactoryImpl.java new file mode 100644 index 00000000..a3526e36 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemFactoryImpl.java @@ -0,0 +1,128 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.*; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.impl.EFactoryImpl; + +import org.eclipse.emf.ecore.plugin.EcorePlugin; + +/** + * + * An implementation of the model Factory. + * + * @generated + */ +public class filesystemFactoryImpl extends EFactoryImpl implements filesystemFactory { + /** + * Creates the default factory implementation. + * + * + * @generated + */ + public static filesystemFactory init() { + try { + filesystemFactory thefilesystemFactory = (filesystemFactory)EPackage.Registry.INSTANCE.getEFactory(filesystemPackage.eNS_URI); + if (thefilesystemFactory != null) { + return thefilesystemFactory; + } + } + catch (Exception exception) { + EcorePlugin.INSTANCE.log(exception); + } + return new filesystemFactoryImpl(); + } + + /** + * Creates an instance of the factory. + * + * + * @generated + */ + public filesystemFactoryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + public EObject create(EClass eClass) { + switch (eClass.getClassifierID()) { + case filesystemPackage.FILE_SYSTEM: return createFileSystem(); + case filesystemPackage.DIR: return createDir(); + case filesystemPackage.FILE: return createFile(); + case filesystemPackage.MODEL: return createModel(); + default: + throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + public FileSystem createFileSystem() { + FileSystemImpl fileSystem = new FileSystemImpl(); + return fileSystem; + } + + /** + * + * + * @generated + */ + public Dir createDir() { + DirImpl dir = new DirImpl(); + return dir; + } + + /** + * + * + * @generated + */ + public File createFile() { + FileImpl file = new FileImpl(); + return file; + } + + /** + * + * + * @generated + */ + public Model createModel() { + ModelImpl model = new ModelImpl(); + return model; + } + + /** + * + * + * @generated + */ + public filesystemPackage getfilesystemPackage() { + return (filesystemPackage)getEPackage(); + } + + /** + * + * + * @deprecated + * @generated + */ + @Deprecated + public static filesystemPackage getPackage() { + return filesystemPackage.eINSTANCE; + } + +} //filesystemFactoryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java new file mode 100644 index 00000000..5c6dd21e --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java @@ -0,0 +1,356 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemFactory; +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +import org.eclipse.emf.ecore.impl.EPackageImpl; + +/** + * + * An implementation of the model Package. + * + * @generated + */ +public class filesystemPackageImpl extends EPackageImpl implements filesystemPackage { + /** + * + * + * @generated + */ + private EClass fileSystemEClass = null; + + /** + * + * + * @generated + */ + private EClass fsObjectEClass = null; + + /** + * + * + * @generated + */ + private EClass dirEClass = null; + + /** + * + * + * @generated + */ + private EClass fileEClass = null; + + /** + * + * + * @generated + */ + private EClass modelEClass = null; + + /** + * Creates an instance of the model Package, registered with + * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package + * package URI value. + *

Note: the correct way to create the package is via the static + * factory method {@link #init init()}, which also performs + * initialization of the package, or returns the registered package, + * if one already exists. + * + * + * @see org.eclipse.emf.ecore.EPackage.Registry + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#eNS_URI + * @see #init() + * @generated + */ + private filesystemPackageImpl() { + super(eNS_URI, filesystemFactory.eINSTANCE); + } + + /** + * + * + * @generated + */ + private static boolean isInited = false; + + /** + * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. + * + *

This method is used to initialize {@link filesystemPackage#eINSTANCE} when that field is accessed. + * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. + * + * + * @see #eNS_URI + * @see #createPackageContents() + * @see #initializePackageContents() + * @generated + */ + public static filesystemPackage init() { + if (isInited) return (filesystemPackage)EPackage.Registry.INSTANCE.getEPackage(filesystemPackage.eNS_URI); + + // Obtain or create and register package + filesystemPackageImpl thefilesystemPackage = (filesystemPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof filesystemPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new filesystemPackageImpl()); + + isInited = true; + + // Create package meta-data objects + thefilesystemPackage.createPackageContents(); + + // Initialize created meta-data + thefilesystemPackage.initializePackageContents(); + + // Mark meta-data to indicate it can't be changed + thefilesystemPackage.freeze(); + + + // Update the registry and return the package + EPackage.Registry.INSTANCE.put(filesystemPackage.eNS_URI, thefilesystemPackage); + return thefilesystemPackage; + } + + /** + * + * + * @generated + */ + public EClass getFileSystem() { + return fileSystemEClass; + } + + /** + * + * + * @generated + */ + public EReference getFileSystem_Root() { + return (EReference)fileSystemEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getFileSystem_Live() { + return (EReference)fileSystemEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getFSObject() { + return fsObjectEClass; + } + + /** + * + * + * @generated + */ + public EReference getFSObject_Parent() { + return (EReference)fsObjectEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getDir() { + return dirEClass; + } + + /** + * + * + * @generated + */ + public EReference getDir_Contents() { + return (EReference)dirEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getFile() { + return fileEClass; + } + + /** + * + * + * @generated + */ + public EClass getModel() { + return modelEClass; + } + + /** + * + * + * @generated + */ + public EReference getModel_Filesystems() { + return (EReference)modelEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getModel_OtherFSObjects() { + return (EReference)modelEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public filesystemFactory getfilesystemFactory() { + return (filesystemFactory)getEFactoryInstance(); + } + + /** + * + * + * @generated + */ + private boolean isCreated = false; + + /** + * Creates the meta-model objects for the package. This method is + * guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void createPackageContents() { + if (isCreated) return; + isCreated = true; + + // Create classes and their features + fileSystemEClass = createEClass(FILE_SYSTEM); + createEReference(fileSystemEClass, FILE_SYSTEM__ROOT); + createEReference(fileSystemEClass, FILE_SYSTEM__LIVE); + + fsObjectEClass = createEClass(FS_OBJECT); + createEReference(fsObjectEClass, FS_OBJECT__PARENT); + + dirEClass = createEClass(DIR); + createEReference(dirEClass, DIR__CONTENTS); + + fileEClass = createEClass(FILE); + + modelEClass = createEClass(MODEL); + createEReference(modelEClass, MODEL__FILESYSTEMS); + createEReference(modelEClass, MODEL__OTHER_FS_OBJECTS); + } + + /** + * + * + * @generated + */ + private boolean isInitialized = false; + + /** + * Complete the initialization of the package and its meta-model. This + * method is guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void initializePackageContents() { + if (isInitialized) return; + isInitialized = true; + + // Initialize package + setName(eNAME); + setNsPrefix(eNS_PREFIX); + setNsURI(eNS_URI); + + // Create type parameters + + // Set bounds for type parameters + + // Add supertypes to classes + dirEClass.getESuperTypes().add(this.getFSObject()); + fileEClass.getESuperTypes().add(this.getFSObject()); + + // Initialize classes, features, and operations; add parameters + initEClass(fileSystemEClass, FileSystem.class, "FileSystem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFileSystem_Root(), this.getDir(), null, "root", null, 1, 1, FileSystem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getFileSystem_Live(), this.getFSObject(), null, "live", null, 0, -1, FileSystem.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED); + + initEClass(fsObjectEClass, FSObject.class, "FSObject", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getFSObject_Parent(), this.getDir(), this.getDir_Contents(), "parent", null, 0, 1, FSObject.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(dirEClass, Dir.class, "Dir", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getDir_Contents(), this.getFSObject(), this.getFSObject_Parent(), "contents", null, 0, -1, Dir.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(fileEClass, File.class, "File", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(modelEClass, Model.class, "Model", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getModel_Filesystems(), this.getFileSystem(), null, "filesystems", null, 1, 1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getModel_OtherFSObjects(), this.getFSObject(), null, "otherFSObjects", null, 0, -1, Model.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + // Create resource + createResource(eNS_URI); + + // Create annotations + // http://www.eclipse.org/emf/2002/Ecore + createEcoreAnnotations(); + // org.eclipse.viatra.query.querybasedfeature + createOrgAnnotations(); + } + + /** + * Initializes the annotations for http://www.eclipse.org/emf/2002/Ecore. + * + * + * @generated + */ + protected void createEcoreAnnotations() { + String source = "http://www.eclipse.org/emf/2002/Ecore"; + addAnnotation + (this, + source, + new String[] { + "settingDelegates", "org.eclipse.viatra.query.querybasedfeature" + }); + } + + /** + * Initializes the annotations for org.eclipse.viatra.query.querybasedfeature. + * + * + * @generated + */ + protected void createOrgAnnotations() { + String source = "org.eclipse.viatra.query.querybasedfeature"; + addAnnotation + (getFileSystem_Live(), + source, + new String[] { + "patternFQN", "hu.bme.mit.inf.dslreasoner.domains.alloyexamples.live" + }); + } + +} //filesystemPackageImpl 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql new file mode 100644 index 00000000..269a4242 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql @@ -0,0 +1,24 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries + +import epackage "FileSystemMetamodel" + +pattern patternContent(o1: FSObject, o2: FSObject) { + Dir.contents(o1,o2); +} + +@QueryBasedFeature +pattern live(this: FileSystem, l: FSObject) { + FileSystem.root(this,l); +} or { + FileSystem.root(this,root); + find patternContent+(root,l); +} + +@Constraint(key={child}, severity="error", message="error") +pattern contentInNotLive(parent : Dir, child: FSObject) { + Dir.contents(parent,child); + neg find live(_,parent); +} or { + Dir.contents(parent,child); + neg find live(_,child); +} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemAdapterFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemAdapterFactory.java new file mode 100644 index 00000000..d9aed046 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemAdapterFactory.java @@ -0,0 +1,192 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.*; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; + +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * The Adapter Factory for the model. + * It provides an adapter createXXX method for each class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage + * @generated + */ +public class filesystemAdapterFactory extends AdapterFactoryImpl { + /** + * The cached model package. + * + * + * @generated + */ + protected static filesystemPackage modelPackage; + + /** + * Creates an instance of the adapter factory. + * + * + * @generated + */ + public filesystemAdapterFactory() { + if (modelPackage == null) { + modelPackage = filesystemPackage.eINSTANCE; + } + } + + /** + * Returns whether this factory is applicable for the type of the object. + * + * This implementation returns true if the object is either the model's package or is an instance object of the model. + * + * @return whether this factory is applicable for the type of the object. + * @generated + */ + @Override + public boolean isFactoryForType(Object object) { + if (object == modelPackage) { + return true; + } + if (object instanceof EObject) { + return ((EObject)object).eClass().getEPackage() == modelPackage; + } + return false; + } + + /** + * The switch that delegates to the createXXX methods. + * + * + * @generated + */ + protected filesystemSwitch modelSwitch = + new filesystemSwitch() { + @Override + public Adapter caseFileSystem(FileSystem object) { + return createFileSystemAdapter(); + } + @Override + public Adapter caseFSObject(FSObject object) { + return createFSObjectAdapter(); + } + @Override + public Adapter caseDir(Dir object) { + return createDirAdapter(); + } + @Override + public Adapter caseFile(File object) { + return createFileAdapter(); + } + @Override + public Adapter caseModel(Model object) { + return createModelAdapter(); + } + @Override + public Adapter defaultCase(EObject object) { + return createEObjectAdapter(); + } + }; + + /** + * Creates an adapter for the target. + * + * + * @param target the object to adapt. + * @return the adapter for the target. + * @generated + */ + @Override + public Adapter createAdapter(Notifier target) { + return modelSwitch.doSwitch((EObject)target); + } + + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem File System}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FileSystem + * @generated + */ + public Adapter createFileSystemAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject FS Object}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.FSObject + * @generated + */ + public Adapter createFSObjectAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir Dir}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Dir + * @generated + */ + public Adapter createDirAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File File}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.File + * @generated + */ + public Adapter createFileAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model Model}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.Model + * @generated + */ + public Adapter createModelAdapter() { + return null; + } + + /** + * Creates a new adapter for the default case. + * + * This default implementation returns null. + * + * @return the new adapter. + * @generated + */ + public Adapter createEObjectAdapter() { + return null; + } + +} //filesystemAdapterFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemSwitch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemSwitch.java new file mode 100644 index 00000000..33f4c7a4 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/util/filesystemSwitch.java @@ -0,0 +1,196 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.*; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.util.Switch; + +/** + * + * The Switch for the model's inheritance hierarchy. + * It supports the call {@link #doSwitch(EObject) doSwitch(object)} + * to invoke the caseXXX method for each class of the model, + * starting with the actual class of the object + * and proceeding up the inheritance hierarchy + * until a non-null result is returned, + * which is the result of the switch. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage + * @generated + */ +public class filesystemSwitch extends Switch { + /** + * The cached model package + * + * + * @generated + */ + protected static filesystemPackage modelPackage; + + /** + * Creates an instance of the switch. + * + * + * @generated + */ + public filesystemSwitch() { + if (modelPackage == null) { + modelPackage = filesystemPackage.eINSTANCE; + } + } + + /** + * Checks whether this is a switch for the given package. + * + * + * @param ePackage the package in question. + * @return whether this is a switch for the given package. + * @generated + */ + @Override + protected boolean isSwitchFor(EPackage ePackage) { + return ePackage == modelPackage; + } + + /** + * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. + * + * + * @return the first non-null result returned by a caseXXX call. + * @generated + */ + @Override + protected T doSwitch(int classifierID, EObject theEObject) { + switch (classifierID) { + case filesystemPackage.FILE_SYSTEM: { + FileSystem fileSystem = (FileSystem)theEObject; + T result = caseFileSystem(fileSystem); + if (result == null) result = defaultCase(theEObject); + return result; + } + case filesystemPackage.FS_OBJECT: { + FSObject fsObject = (FSObject)theEObject; + T result = caseFSObject(fsObject); + if (result == null) result = defaultCase(theEObject); + return result; + } + case filesystemPackage.DIR: { + Dir dir = (Dir)theEObject; + T result = caseDir(dir); + if (result == null) result = caseFSObject(dir); + if (result == null) result = defaultCase(theEObject); + return result; + } + case filesystemPackage.FILE: { + File file = (File)theEObject; + T result = caseFile(file); + if (result == null) result = caseFSObject(file); + if (result == null) result = defaultCase(theEObject); + return result; + } + case filesystemPackage.MODEL: { + Model model = (Model)theEObject; + T result = caseModel(model); + if (result == null) result = defaultCase(theEObject); + return result; + } + default: return defaultCase(theEObject); + } + } + + /** + * Returns the result of interpreting the object as an instance of 'File System'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'File System'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFileSystem(FileSystem object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'FS Object'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'FS Object'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFSObject(FSObject object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Dir'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Dir'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseDir(Dir object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'File'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'File'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFile(File object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Model'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Model'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseModel(Model object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'EObject'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch, but this is the last case anyway. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'EObject'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) + * @generated + */ + @Override + public T defaultCase(EObject object) { + return null; + } + +} //filesystemSwitch diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java new file mode 100644 index 00000000..cc4049c4 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Choice'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getChoice() + * @model + * @generated + */ +public interface Choice extends Pseudostate { +} // Choice diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java new file mode 100644 index 00000000..037b1b3c --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Composite Element'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions Regions}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getCompositeElement() + * @model abstract="true" + * @generated + */ +public interface CompositeElement extends EObject { + /** + * Returns the value of the 'Regions' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region}. + * + *

+ * If the meaning of the 'Regions' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Regions' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getCompositeElement_Regions() + * @model containment="true" + * @generated + */ + EList getRegions(); + +} // CompositeElement diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java new file mode 100644 index 00000000..da40c481 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Entry'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getEntry() + * @model + * @generated + */ +public interface Entry extends Pseudostate { +} // Entry diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java new file mode 100644 index 00000000..9f8e12d3 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Exit'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getExit() + * @model + * @generated + */ +public interface Exit extends Pseudostate { +} // Exit diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java new file mode 100644 index 00000000..33703d36 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Final State'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getFinalState() + * @model + * @generated + */ +public interface FinalState extends RegularState { +} // FinalState diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java new file mode 100644 index 00000000..e6a003f9 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Pseudostate'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getPseudostate() + * @model abstract="true" + * @generated + */ +public interface Pseudostate extends Vertex { +} // Pseudostate diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java new file mode 100644 index 00000000..f4c3f114 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java @@ -0,0 +1,42 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Region'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices Vertices}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegion() + * @model + * @generated + */ +public interface Region extends EObject { + /** + * Returns the value of the 'Vertices' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex}. + * + *

+ * If the meaning of the 'Vertices' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Vertices' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegion_Vertices() + * @model containment="true" ordered="false" + * @generated + */ + EList getVertices(); + +} // Region diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java new file mode 100644 index 00000000..7db584e5 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Regular State'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegularState() + * @model abstract="true" + * @generated + */ +public interface RegularState extends Vertex { +} // RegularState diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java new file mode 100644 index 00000000..3c65be40 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'State'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getState() + * @model + * @generated + */ +public interface State extends RegularState, CompositeElement { +} // State diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java new file mode 100644 index 00000000..33a1dd7a --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Statechart'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getStatechart() + * @model + * @generated + */ +public interface Statechart extends CompositeElement { +} // Statechart diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java new file mode 100644 index 00000000..f1294200 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java @@ -0,0 +1,17 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + + +/** + * + * A representation of the model object 'Synchronization'. + * + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getSynchronization() + * @model + * @generated + */ +public interface Synchronization extends Pseudostate { +} // Synchronization diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java new file mode 100644 index 00000000..543cc73b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java @@ -0,0 +1,81 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Transition'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition() + * @model + * @generated + */ +public interface Transition extends EObject { + /** + * Returns the value of the 'Target' reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions Incoming Transitions}'. + * + *

+ * If the meaning of the 'Target' reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Target' reference. + * @see #setTarget(Vertex) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition_Target() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions + * @model opposite="incomingTransitions" required="true" ordered="false" + * @generated + */ + Vertex getTarget(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}' reference. + * + * + * @param value the new value of the 'Target' reference. + * @see #getTarget() + * @generated + */ + void setTarget(Vertex value); + + /** + * Returns the value of the 'Source' container reference. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}'. + * + *

+ * If the meaning of the 'Source' container reference isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Source' container reference. + * @see #setSource(Vertex) + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition_Source() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions + * @model opposite="outgoingTransitions" transient="false" ordered="false" + * @generated + */ + Vertex getSource(); + + /** + * Sets the value of the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}' container reference. + * + * + * @param value the new value of the 'Source' container reference. + * @see #getSource() + * @generated + */ + void setSource(Vertex value); + +} // Transition diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java new file mode 100644 index 00000000..6005a550 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java @@ -0,0 +1,63 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * A representation of the model object 'Vertex'. + * + * + *

+ * The following features are supported: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions Incoming Transitions}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex() + * @model abstract="true" + * @generated + */ +public interface Vertex extends EObject { + /** + * Returns the value of the 'Incoming Transitions' reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}'. + * + *

+ * If the meaning of the 'Incoming Transitions' reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Incoming Transitions' reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex_IncomingTransitions() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget + * @model opposite="target" ordered="false" + * @generated + */ + EList getIncomingTransitions(); + + /** + * Returns the value of the 'Outgoing Transitions' containment reference list. + * The list contents are of type {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition}. + * It is bidirectional and its opposite is '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}'. + * + *

+ * If the meaning of the 'Outgoing Transitions' containment reference list isn't clear, + * there really should be more of a description here... + *

+ * + * @return the value of the 'Outgoing Transitions' containment reference list. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex_OutgoingTransitions() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource + * @model opposite="source" containment="true" ordered="false" + * @generated + */ + EList getOutgoingTransitions(); + +} // Vertex diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java new file mode 100644 index 00000000..8fc4883b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Choice'. + * + * + * @generated + */ +public class ChoiceImpl extends PseudostateImpl implements Choice { + /** + * + * + * @generated + */ + protected ChoiceImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.CHOICE; + } + +} //ChoiceImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java new file mode 100644 index 00000000..0218f9c7 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java @@ -0,0 +1,152 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Composite Element'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl#getRegions Regions}
  • + *
+ * + * @generated + */ +public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container implements CompositeElement { + /** + * The cached value of the '{@link #getRegions() Regions}' containment reference list. + * + * + * @see #getRegions() + * @generated + * @ordered + */ + protected EList regions; + + /** + * + * + * @generated + */ + protected CompositeElementImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.COMPOSITE_ELEMENT; + } + + /** + * + * + * @generated + */ + public EList getRegions() { + if (regions == null) { + regions = new EObjectContainmentEList(Region.class, this, yakinduPackage.COMPOSITE_ELEMENT__REGIONS); + } + return regions; + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + return ((InternalEList)getRegions()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + return getRegions(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + getRegions().clear(); + getRegions().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + getRegions().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + return regions != null && !regions.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //CompositeElementImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java new file mode 100644 index 00000000..d0334475 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Entry'. + * + * + * @generated + */ +public class EntryImpl extends PseudostateImpl implements Entry { + /** + * + * + * @generated + */ + protected EntryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.ENTRY; + } + +} //EntryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java new file mode 100644 index 00000000..d1448776 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Exit'. + * + * + * @generated + */ +public class ExitImpl extends PseudostateImpl implements Exit { + /** + * + * + * @generated + */ + protected ExitImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.EXIT; + } + +} //ExitImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java new file mode 100644 index 00000000..716c096e --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Final State'. + * + * + * @generated + */ +public class FinalStateImpl extends RegularStateImpl implements FinalState { + /** + * + * + * @generated + */ + protected FinalStateImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.FINAL_STATE; + } + +} //FinalStateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java new file mode 100644 index 00000000..b9fc27f3 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Pseudostate'. + * + * + * @generated + */ +public abstract class PseudostateImpl extends VertexImpl implements Pseudostate { + /** + * + * + * @generated + */ + protected PseudostateImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.PSEUDOSTATE; + } + +} //PseudostateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java new file mode 100644 index 00000000..fa873aeb --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java @@ -0,0 +1,152 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Region'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl#getVertices Vertices}
  • + *
+ * + * @generated + */ +public class RegionImpl extends MinimalEObjectImpl.Container implements Region { + /** + * The cached value of the '{@link #getVertices() Vertices}' containment reference list. + * + * + * @see #getVertices() + * @generated + * @ordered + */ + protected EList vertices; + + /** + * + * + * @generated + */ + protected RegionImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.REGION; + } + + /** + * + * + * @generated + */ + public EList getVertices() { + if (vertices == null) { + vertices = new EObjectContainmentEList(Vertex.class, this, yakinduPackage.REGION__VERTICES); + } + return vertices; + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.REGION__VERTICES: + return ((InternalEList)getVertices()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case yakinduPackage.REGION__VERTICES: + return getVertices(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case yakinduPackage.REGION__VERTICES: + getVertices().clear(); + getVertices().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case yakinduPackage.REGION__VERTICES: + getVertices().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case yakinduPackage.REGION__VERTICES: + return vertices != null && !vertices.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //RegionImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java new file mode 100644 index 00000000..bbe21a14 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Regular State'. + * + * + * @generated + */ +public abstract class RegularStateImpl extends VertexImpl implements RegularState { + /** + * + * + * @generated + */ + protected RegularStateImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.REGULAR_STATE; + } + +} //RegularStateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java new file mode 100644 index 00000000..66ab2a8f --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java @@ -0,0 +1,183 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'State'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl#getRegions Regions}
  • + *
+ * + * @generated + */ +public class StateImpl extends RegularStateImpl implements State { + /** + * The cached value of the '{@link #getRegions() Regions}' containment reference list. + * + * + * @see #getRegions() + * @generated + * @ordered + */ + protected EList regions; + + /** + * + * + * @generated + */ + protected StateImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.STATE; + } + + /** + * + * + * @generated + */ + public EList getRegions() { + if (regions == null) { + regions = new EObjectContainmentEList(Region.class, this, yakinduPackage.STATE__REGIONS); + } + return regions; + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.STATE__REGIONS: + return ((InternalEList)getRegions()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case yakinduPackage.STATE__REGIONS: + return getRegions(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case yakinduPackage.STATE__REGIONS: + getRegions().clear(); + getRegions().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case yakinduPackage.STATE__REGIONS: + getRegions().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case yakinduPackage.STATE__REGIONS: + return regions != null && !regions.isEmpty(); + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) { + if (baseClass == CompositeElement.class) { + switch (derivedFeatureID) { + case yakinduPackage.STATE__REGIONS: return yakinduPackage.COMPOSITE_ELEMENT__REGIONS; + default: return -1; + } + } + return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); + } + + /** + * + * + * @generated + */ + @Override + public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) { + if (baseClass == CompositeElement.class) { + switch (baseFeatureID) { + case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: return yakinduPackage.STATE__REGIONS; + default: return -1; + } + } + return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); + } + +} //StateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java new file mode 100644 index 00000000..056820ca --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Statechart'. + * + * + * @generated + */ +public class StatechartImpl extends CompositeElementImpl implements Statechart { + /** + * + * + * @generated + */ + protected StatechartImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.STATECHART; + } + +} //StatechartImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java new file mode 100644 index 00000000..28ef69ea --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java @@ -0,0 +1,37 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; + +/** + * + * An implementation of the model object 'Synchronization'. + * + * + * @generated + */ +public class SynchronizationImpl extends PseudostateImpl implements Synchronization { + /** + * + * + * @generated + */ + protected SynchronizationImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.SYNCHRONIZATION; + } + +} //SynchronizationImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java new file mode 100644 index 00000000..ea1677ee --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java @@ -0,0 +1,284 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EcoreUtil; + +/** + * + * An implementation of the model object 'Transition'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl#getTarget Target}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl#getSource Source}
  • + *
+ * + * @generated + */ +public class TransitionImpl extends MinimalEObjectImpl.Container implements Transition { + /** + * The cached value of the '{@link #getTarget() Target}' reference. + * + * + * @see #getTarget() + * @generated + * @ordered + */ + protected Vertex target; + + /** + * + * + * @generated + */ + protected TransitionImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.TRANSITION; + } + + /** + * + * + * @generated + */ + public Vertex getTarget() { + if (target != null && target.eIsProxy()) { + InternalEObject oldTarget = (InternalEObject)target; + target = (Vertex)eResolveProxy(oldTarget); + if (target != oldTarget) { + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.RESOLVE, yakinduPackage.TRANSITION__TARGET, oldTarget, target)); + } + } + return target; + } + + /** + * + * + * @generated + */ + public Vertex basicGetTarget() { + return target; + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetTarget(Vertex newTarget, NotificationChain msgs) { + Vertex oldTarget = target; + target = newTarget; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__TARGET, oldTarget, newTarget); + if (msgs == null) msgs = notification; else msgs.add(notification); + } + return msgs; + } + + /** + * + * + * @generated + */ + public void setTarget(Vertex newTarget) { + if (newTarget != target) { + NotificationChain msgs = null; + if (target != null) + msgs = ((InternalEObject)target).eInverseRemove(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + if (newTarget != null) + msgs = ((InternalEObject)newTarget).eInverseAdd(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + msgs = basicSetTarget(newTarget, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__TARGET, newTarget, newTarget)); + } + + /** + * + * + * @generated + */ + public Vertex getSource() { + if (eContainerFeatureID() != yakinduPackage.TRANSITION__SOURCE) return null; + return (Vertex)eInternalContainer(); + } + + /** + * + * + * @generated + */ + public NotificationChain basicSetSource(Vertex newSource, NotificationChain msgs) { + msgs = eBasicSetContainer((InternalEObject)newSource, yakinduPackage.TRANSITION__SOURCE, msgs); + return msgs; + } + + /** + * + * + * @generated + */ + public void setSource(Vertex newSource) { + if (newSource != eInternalContainer() || (eContainerFeatureID() != yakinduPackage.TRANSITION__SOURCE && newSource != null)) { + if (EcoreUtil.isAncestor(this, newSource)) + throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); + NotificationChain msgs = null; + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + if (newSource != null) + msgs = ((InternalEObject)newSource).eInverseAdd(this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); + msgs = basicSetSource(newSource, msgs); + if (msgs != null) msgs.dispatch(); + } + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__SOURCE, newSource, newSource)); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + if (target != null) + msgs = ((InternalEObject)target).eInverseRemove(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + return basicSetTarget((Vertex)otherEnd, msgs); + case yakinduPackage.TRANSITION__SOURCE: + if (eInternalContainer() != null) + msgs = eBasicRemoveFromContainer(msgs); + return basicSetSource((Vertex)otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + return basicSetTarget(null, msgs); + case yakinduPackage.TRANSITION__SOURCE: + return basicSetSource(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { + switch (eContainerFeatureID()) { + case yakinduPackage.TRANSITION__SOURCE: + return eInternalContainer().eInverseRemove(this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); + } + return super.eBasicRemoveFromContainerFeature(msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + if (resolve) return getTarget(); + return basicGetTarget(); + case yakinduPackage.TRANSITION__SOURCE: + return getSource(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + setTarget((Vertex)newValue); + return; + case yakinduPackage.TRANSITION__SOURCE: + setSource((Vertex)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + setTarget((Vertex)null); + return; + case yakinduPackage.TRANSITION__SOURCE: + setSource((Vertex)null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case yakinduPackage.TRANSITION__TARGET: + return target != null; + case yakinduPackage.TRANSITION__SOURCE: + return getSource() != null; + } + return super.eIsSet(featureID); + } + +} //TransitionImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java new file mode 100644 index 00000000..6f5b9ed3 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java @@ -0,0 +1,206 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import java.util.Collection; + +import org.eclipse.emf.common.notify.NotificationChain; + +import org.eclipse.emf.common.util.EList; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.InternalEObject; + +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; +import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList; +import org.eclipse.emf.ecore.util.InternalEList; + +/** + * + * An implementation of the model object 'Vertex'. + * + *

+ * The following features are implemented: + *

+ *
    + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl#getIncomingTransitions Incoming Transitions}
  • + *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl#getOutgoingTransitions Outgoing Transitions}
  • + *
+ * + * @generated + */ +public abstract class VertexImpl extends MinimalEObjectImpl.Container implements Vertex { + /** + * The cached value of the '{@link #getIncomingTransitions() Incoming Transitions}' reference list. + * + * + * @see #getIncomingTransitions() + * @generated + * @ordered + */ + protected EList incomingTransitions; + + /** + * The cached value of the '{@link #getOutgoingTransitions() Outgoing Transitions}' containment reference list. + * + * + * @see #getOutgoingTransitions() + * @generated + * @ordered + */ + protected EList outgoingTransitions; + + /** + * + * + * @generated + */ + protected VertexImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return yakinduPackage.Literals.VERTEX; + } + + /** + * + * + * @generated + */ + public EList getIncomingTransitions() { + if (incomingTransitions == null) { + incomingTransitions = new EObjectWithInverseResolvingEList(Transition.class, this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, yakinduPackage.TRANSITION__TARGET); + } + return incomingTransitions; + } + + /** + * + * + * @generated + */ + public EList getOutgoingTransitions() { + if (outgoingTransitions == null) { + outgoingTransitions = new EObjectContainmentWithInverseEList(Transition.class, this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, yakinduPackage.TRANSITION__SOURCE); + } + return outgoingTransitions; + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + return ((InternalEList)(InternalEList)getIncomingTransitions()).basicAdd(otherEnd, msgs); + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + return ((InternalEList)(InternalEList)getOutgoingTransitions()).basicAdd(otherEnd, msgs); + } + return super.eInverseAdd(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + return ((InternalEList)getIncomingTransitions()).basicRemove(otherEnd, msgs); + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + return ((InternalEList)getOutgoingTransitions()).basicRemove(otherEnd, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + return getIncomingTransitions(); + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + return getOutgoingTransitions(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + getIncomingTransitions().clear(); + getIncomingTransitions().addAll((Collection)newValue); + return; + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + getOutgoingTransitions().clear(); + getOutgoingTransitions().addAll((Collection)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + getIncomingTransitions().clear(); + return; + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + getOutgoingTransitions().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + return incomingTransitions != null && !incomingTransitions.isEmpty(); + case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + return outgoingTransitions != null && !outgoingTransitions.isEmpty(); + } + return super.eIsSet(featureID); + } + +} //VertexImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java new file mode 100644 index 00000000..5d004565 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java @@ -0,0 +1,183 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.impl.EFactoryImpl; + +import org.eclipse.emf.ecore.plugin.EcorePlugin; + +/** + * + * An implementation of the model Factory. + * + * @generated + */ +public class yakinduFactoryImpl extends EFactoryImpl implements yakinduFactory { + /** + * Creates the default factory implementation. + * + * + * @generated + */ + public static yakinduFactory init() { + try { + yakinduFactory theyakinduFactory = (yakinduFactory)EPackage.Registry.INSTANCE.getEFactory(yakinduPackage.eNS_URI); + if (theyakinduFactory != null) { + return theyakinduFactory; + } + } + catch (Exception exception) { + EcorePlugin.INSTANCE.log(exception); + } + return new yakinduFactoryImpl(); + } + + /** + * Creates an instance of the factory. + * + * + * @generated + */ + public yakinduFactoryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + public EObject create(EClass eClass) { + switch (eClass.getClassifierID()) { + case yakinduPackage.REGION: return createRegion(); + case yakinduPackage.TRANSITION: return createTransition(); + case yakinduPackage.STATECHART: return createStatechart(); + case yakinduPackage.ENTRY: return createEntry(); + case yakinduPackage.SYNCHRONIZATION: return createSynchronization(); + case yakinduPackage.STATE: return createState(); + case yakinduPackage.CHOICE: return createChoice(); + case yakinduPackage.EXIT: return createExit(); + case yakinduPackage.FINAL_STATE: return createFinalState(); + default: + throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + public Region createRegion() { + RegionImpl region = new RegionImpl(); + return region; + } + + /** + * + * + * @generated + */ + public Transition createTransition() { + TransitionImpl transition = new TransitionImpl(); + return transition; + } + + /** + * + * + * @generated + */ + public Statechart createStatechart() { + StatechartImpl statechart = new StatechartImpl(); + return statechart; + } + + /** + * + * + * @generated + */ + public Entry createEntry() { + EntryImpl entry = new EntryImpl(); + return entry; + } + + /** + * + * + * @generated + */ + public Synchronization createSynchronization() { + SynchronizationImpl synchronization = new SynchronizationImpl(); + return synchronization; + } + + /** + * + * + * @generated + */ + public State createState() { + StateImpl state = new StateImpl(); + return state; + } + + /** + * + * + * @generated + */ + public Choice createChoice() { + ChoiceImpl choice = new ChoiceImpl(); + return choice; + } + + /** + * + * + * @generated + */ + public Exit createExit() { + ExitImpl exit = new ExitImpl(); + return exit; + } + + /** + * + * + * @generated + */ + public FinalState createFinalState() { + FinalStateImpl finalState = new FinalStateImpl(); + return finalState; + } + + /** + * + * + * @generated + */ + public yakinduPackage getyakinduPackage() { + return (yakinduPackage)getEPackage(); + } + + /** + * + * + * @deprecated + * @generated + */ + @Deprecated + public static yakinduPackage getPackage() { + return yakinduPackage.eINSTANCE; + } + +} //yakinduFactoryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java new file mode 100644 index 00000000..2213e07f --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java @@ -0,0 +1,494 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduFactory; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +import org.eclipse.emf.ecore.impl.EPackageImpl; + +/** + * + * An implementation of the model Package. + * + * @generated + */ +public class yakinduPackageImpl extends EPackageImpl implements yakinduPackage { + /** + * + * + * @generated + */ + private EClass pseudostateEClass = null; + + /** + * + * + * @generated + */ + private EClass vertexEClass = null; + + /** + * + * + * @generated + */ + private EClass regionEClass = null; + + /** + * + * + * @generated + */ + private EClass transitionEClass = null; + + /** + * + * + * @generated + */ + private EClass statechartEClass = null; + + /** + * + * + * @generated + */ + private EClass entryEClass = null; + + /** + * + * + * @generated + */ + private EClass synchronizationEClass = null; + + /** + * + * + * @generated + */ + private EClass stateEClass = null; + + /** + * + * + * @generated + */ + private EClass regularStateEClass = null; + + /** + * + * + * @generated + */ + private EClass compositeElementEClass = null; + + /** + * + * + * @generated + */ + private EClass choiceEClass = null; + + /** + * + * + * @generated + */ + private EClass exitEClass = null; + + /** + * + * + * @generated + */ + private EClass finalStateEClass = null; + + /** + * Creates an instance of the model Package, registered with + * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package + * package URI value. + *

Note: the correct way to create the package is via the static + * factory method {@link #init init()}, which also performs + * initialization of the package, or returns the registered package, + * if one already exists. + * + * + * @see org.eclipse.emf.ecore.EPackage.Registry + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#eNS_URI + * @see #init() + * @generated + */ + private yakinduPackageImpl() { + super(eNS_URI, yakinduFactory.eINSTANCE); + } + + /** + * + * + * @generated + */ + private static boolean isInited = false; + + /** + * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. + * + *

This method is used to initialize {@link yakinduPackage#eINSTANCE} when that field is accessed. + * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. + * + * + * @see #eNS_URI + * @see #createPackageContents() + * @see #initializePackageContents() + * @generated + */ + public static yakinduPackage init() { + if (isInited) return (yakinduPackage)EPackage.Registry.INSTANCE.getEPackage(yakinduPackage.eNS_URI); + + // Obtain or create and register package + yakinduPackageImpl theyakinduPackage = (yakinduPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof yakinduPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new yakinduPackageImpl()); + + isInited = true; + + // Create package meta-data objects + theyakinduPackage.createPackageContents(); + + // Initialize created meta-data + theyakinduPackage.initializePackageContents(); + + // Mark meta-data to indicate it can't be changed + theyakinduPackage.freeze(); + + + // Update the registry and return the package + EPackage.Registry.INSTANCE.put(yakinduPackage.eNS_URI, theyakinduPackage); + return theyakinduPackage; + } + + /** + * + * + * @generated + */ + public EClass getPseudostate() { + return pseudostateEClass; + } + + /** + * + * + * @generated + */ + public EClass getVertex() { + return vertexEClass; + } + + /** + * + * + * @generated + */ + public EReference getVertex_IncomingTransitions() { + return (EReference)vertexEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getVertex_OutgoingTransitions() { + return (EReference)vertexEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getRegion() { + return regionEClass; + } + + /** + * + * + * @generated + */ + public EReference getRegion_Vertices() { + return (EReference)regionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getTransition() { + return transitionEClass; + } + + /** + * + * + * @generated + */ + public EReference getTransition_Target() { + return (EReference)transitionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getTransition_Source() { + return (EReference)transitionEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getStatechart() { + return statechartEClass; + } + + /** + * + * + * @generated + */ + public EClass getEntry() { + return entryEClass; + } + + /** + * + * + * @generated + */ + public EClass getSynchronization() { + return synchronizationEClass; + } + + /** + * + * + * @generated + */ + public EClass getState() { + return stateEClass; + } + + /** + * + * + * @generated + */ + public EClass getRegularState() { + return regularStateEClass; + } + + /** + * + * + * @generated + */ + public EClass getCompositeElement() { + return compositeElementEClass; + } + + /** + * + * + * @generated + */ + public EReference getCompositeElement_Regions() { + return (EReference)compositeElementEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getChoice() { + return choiceEClass; + } + + /** + * + * + * @generated + */ + public EClass getExit() { + return exitEClass; + } + + /** + * + * + * @generated + */ + public EClass getFinalState() { + return finalStateEClass; + } + + /** + * + * + * @generated + */ + public yakinduFactory getyakinduFactory() { + return (yakinduFactory)getEFactoryInstance(); + } + + /** + * + * + * @generated + */ + private boolean isCreated = false; + + /** + * Creates the meta-model objects for the package. This method is + * guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void createPackageContents() { + if (isCreated) return; + isCreated = true; + + // Create classes and their features + pseudostateEClass = createEClass(PSEUDOSTATE); + + vertexEClass = createEClass(VERTEX); + createEReference(vertexEClass, VERTEX__INCOMING_TRANSITIONS); + createEReference(vertexEClass, VERTEX__OUTGOING_TRANSITIONS); + + regionEClass = createEClass(REGION); + createEReference(regionEClass, REGION__VERTICES); + + transitionEClass = createEClass(TRANSITION); + createEReference(transitionEClass, TRANSITION__TARGET); + createEReference(transitionEClass, TRANSITION__SOURCE); + + statechartEClass = createEClass(STATECHART); + + entryEClass = createEClass(ENTRY); + + synchronizationEClass = createEClass(SYNCHRONIZATION); + + stateEClass = createEClass(STATE); + + regularStateEClass = createEClass(REGULAR_STATE); + + compositeElementEClass = createEClass(COMPOSITE_ELEMENT); + createEReference(compositeElementEClass, COMPOSITE_ELEMENT__REGIONS); + + choiceEClass = createEClass(CHOICE); + + exitEClass = createEClass(EXIT); + + finalStateEClass = createEClass(FINAL_STATE); + } + + /** + * + * + * @generated + */ + private boolean isInitialized = false; + + /** + * Complete the initialization of the package and its meta-model. This + * method is guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void initializePackageContents() { + if (isInitialized) return; + isInitialized = true; + + // Initialize package + setName(eNAME); + setNsPrefix(eNS_PREFIX); + setNsURI(eNS_URI); + + // Create type parameters + + // Set bounds for type parameters + + // Add supertypes to classes + pseudostateEClass.getESuperTypes().add(this.getVertex()); + statechartEClass.getESuperTypes().add(this.getCompositeElement()); + entryEClass.getESuperTypes().add(this.getPseudostate()); + synchronizationEClass.getESuperTypes().add(this.getPseudostate()); + stateEClass.getESuperTypes().add(this.getRegularState()); + stateEClass.getESuperTypes().add(this.getCompositeElement()); + regularStateEClass.getESuperTypes().add(this.getVertex()); + choiceEClass.getESuperTypes().add(this.getPseudostate()); + exitEClass.getESuperTypes().add(this.getPseudostate()); + finalStateEClass.getESuperTypes().add(this.getRegularState()); + + // Initialize classes, features, and operations; add parameters + initEClass(pseudostateEClass, Pseudostate.class, "Pseudostate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(vertexEClass, Vertex.class, "Vertex", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getVertex_IncomingTransitions(), this.getTransition(), this.getTransition_Target(), "incomingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + initEReference(getVertex_OutgoingTransitions(), this.getTransition(), this.getTransition_Source(), "outgoingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(regionEClass, Region.class, "Region", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getRegion_Vertices(), this.getVertex(), null, "vertices", null, 0, -1, Region.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getTransition_Target(), this.getVertex(), this.getVertex_IncomingTransitions(), "target", null, 1, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + initEReference(getTransition_Source(), this.getVertex(), this.getVertex_OutgoingTransitions(), "source", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(statechartEClass, Statechart.class, "Statechart", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(entryEClass, Entry.class, "Entry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(synchronizationEClass, Synchronization.class, "Synchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(stateEClass, State.class, "State", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(regularStateEClass, RegularState.class, "RegularState", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(compositeElementEClass, CompositeElement.class, "CompositeElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getCompositeElement_Regions(), this.getRegion(), null, "regions", null, 0, -1, CompositeElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(choiceEClass, Choice.class, "Choice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(exitEClass, Exit.class, "Exit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(finalStateEClass, FinalState.class, "FinalState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + // Create resource + createResource(eNS_URI); + } + +} //yakinduPackageImpl 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql new file mode 100644 index 00000000..2e498670 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql @@ -0,0 +1,270 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries + +import epackage "YakinduMetamodel" + +///////// +// Entry +///////// + +pattern entryInRegion_M0(r1 : Region, e1 : Entry) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M1(r1 : Region, e1) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M2(r1 : Region, e1: Entry) { + // For positive constraint + Region(r1);Entry(e1); +} + + +//@Constraint(severity="error", message="error", key = {r1}) +pattern noEntryInRegion_M0(r1 : Region) { + neg find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M1(r1 : Region) { + neg find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M2(r1 : Region) { + neg find entryInRegion_M2(r1, _); +} +pattern noEntryInRegion_M3(r1 : Region) { + find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M4(r1 : Region) { + find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M5(r1 : Region) { + find entryInRegion_M2(r1, _); +} + +//@Constraint(severity="error", message="error", key = {r}) +pattern multipleEntryInRegion_M0(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M1(r : Region) { + find entryInRegion_M1(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M2(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M3(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M1(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M4(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M2(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M5(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); +} + + +pattern transition_M0(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t, trg); +} +pattern transition_M1(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Vertex(trg); +} +pattern transition_M2(t : Transition, src : Vertex, trg : Vertex) { + Vertex(src); + Transition.target(t, trg); +} +pattern transition_M3(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t_x, src); + Transition.target(t, trg); +} +pattern transition_M4(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t_x, trg); +} + +//@Constraint(severity="error", message="error", key = {e}) +pattern incomingToEntry_M0(t : Transition, e : Entry) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_1(t : Transition, e) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_2(t : Transition, e : Entry) { + find transition_M1(t, _, e); +} +pattern incomingToEntry_3(t : Transition, e : Entry) { + find transition_M2(t, _, e); +} +pattern incomingToEntry_4(t : Transition, e : Entry) { + find transition_M3(t, _, e); +} +pattern incomingToEntry_5(t : Transition, e : Entry) { + find transition_M4(t, _, e); +} + +pattern noOutgoingTransitionFromEntry_M0(e : Entry) { + neg find transition_M0(_, e, _); +} + +pattern noOutgoingTransitionFromEntry_M1(e) { + Vertex(e); + neg find transition_M0(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M2(e : Entry) { + neg find transition_M1(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M3(e : Entry) { + neg find transition_M2(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M4(e : Entry) { + neg find transition_M3(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M5(e : Entry) { + neg find transition_M4(_, e, _); +} + + +//@Constraint(severity="error", message="error", key = {e}) +pattern multipleTransitionFromEntry_M0(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M1(e, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M2(e : Entry, t1 : Transition, t2: Transition) { + Transition(t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M3(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Transition(t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M4(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); +} + +///////// +// Exit +///////// + +//@Constraint(severity="error", message="error", key = {e}) +pattern outgoingFromExit_M0(t : Transition, e : Exit) { + Exit.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M1(t : Transition, e) { + Vertex.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M2(t : Transition, e : Exit) { + Transition(t); + Exit(e); +} + +///////// +// Final +///////// + +//@Constraint(severity="error", message="error", key = {f}) +pattern outgoingFromFinal_M0(t : Transition, f : FinalState) { + FinalState.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M1(t : Transition, f) { + Vertex.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M2(t : Transition, f : FinalState) { + Transition(t); + FinalState(f); +} + +///////// +// State vs Region +///////// + +//@Constraint(severity="error", message="error", key = {region}) +pattern noStateInRegion_M0(region: Region) { + neg find StateInRegion_M0(region,_); +} +pattern noStateInRegion_M1(region: Region) { + neg find StateInRegion_M1(region,_); +} +pattern noStateInRegion_M2(region: Region) { + neg find StateInRegion_M2(region,_); +} +pattern noStateInRegion_M3(region: Region) { + find StateInRegion_M0(region,_); +} + +pattern StateInRegion_M0(region: Region, state: State) { + Region.vertices(region,state); +} +pattern StateInRegion_M1(region: Region, state) { + Region.vertices(region,state); +} +pattern StateInRegion_M2(region: Region, state:State) { + Region(region);State(state); +} + +///////// +// Choice +///////// + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoOutgoing_M0(c : Choice) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M1(c:Vertex) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M2(c : Choice) { + neg find transition_M1(_, c, _); +} +pattern choiceHasNoOutgoing_M3(c : Choice) { + neg find transition_M2(_, c, _); +} +pattern choiceHasNoOutgoing_M4(c : Choice) { + neg find transition_M3(_, c, _); +} +pattern choiceHasNoOutgoing_M5(c : Choice) { + neg find transition_M4(_, c, _); +} +pattern choiceHasNoOutgoing_M6(c : Choice) { + find transition_M0(_, c, _); +} + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoIncoming_M0(c: Choice) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M1(c:Vertex) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M2(c: Choice) { + neg find transition_M1(_, _, c); +} +pattern choiceHasNoIncoming_M3(c: Choice) { + neg find transition_M2(_, _, c); +} +pattern choiceHasNoIncoming_M4(c: Choice) { + neg find transition_M3(_, _, c); +} +pattern choiceHasNoIncoming_M5(c: Choice) { + neg find transition_M4(_, _, c); +} +pattern choiceHasNoIncoming_M6(c: Choice) { + find transition_M0(_, _, c); +} 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql new file mode 100644 index 00000000..597b1691 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql @@ -0,0 +1,227 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries + +import epackage "YakinduMetamodel" + +///////// +// Entry +///////// + +pattern entryInRegion(r1 : Region, e1 : Entry) { + Region.vertices(r1, e1); +} + +@Constraint(severity="error", message="error", key = {r1}) +pattern noEntryInRegion(r1 : Region) { + neg find entryInRegion(r1, _); +} + +@Constraint(severity="error", message="error", key = {r}) +pattern multipleEntryInRegion(r : Region) { + find entryInRegion(r, e1); + find entryInRegion(r, e2); + e1 != e2; +} + +pattern transition(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t, trg); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern incomingToEntry(t : Transition, e : Entry) { + find transition(t, _, e); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern noOutgoingTransitionFromEntry(e : Entry) { + neg find transition(_, e, _); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} + +///////// +// Exit +///////// + +@Constraint(severity="error", message="error", key = {e}) +pattern outgoingFromExit(t : Transition, e : Exit) { + Exit.outgoingTransitions(e,t); +} + +///////// +// Final +///////// + +@Constraint(severity="error", message="error", key = {f}) +pattern outgoingFromFinal(t : Transition, f : FinalState) { + FinalState.outgoingTransitions(f,t); +} + +///////// +// State vs Region +///////// + +@Constraint(severity="error", message="error", key = {region}) +pattern noStateInRegion(region: Region) { + neg find StateInRegion(region,_); +} +pattern StateInRegion(region: Region, state: State) { + Region.vertices(region,state); +} + +///////// +// Choice +///////// + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoOutgoing(c : Choice) { + neg find transition(_, c, _); +} + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoIncoming(c: Choice) { + neg find transition(_, _, c); +} + +///////// +// Synchronization +///////// + +@Constraint(severity="error", message="error", key = {s}) +pattern synchHasNoOutgoing(s : Synchronization) { + neg find transition(_, s, _); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern synchHasNoIncoming(s : Synchronization) { + neg find transition(_, _, s); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) { + find transition(t1, v1, s); + find transition(t2, v2, s); + t1!=t2; + Region.vertices(r, v1); + Region.vertices(r, v2); +} or { + find transition(t1, s, v1); + find transition(t2, s, v2); + t1!=t2; + Region.vertices(r, v1); + Region.vertices(r, v2); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern notSynchronizingStates(s : Synchronization) { + neg find hasMultipleOutgoingTrainsition(s); + neg find hasMultipleIncomingTrainsition(s); +} + +pattern hasMultipleOutgoingTrainsition(v : Synchronization) { + find transition(_, v, trg1); + find transition(_, v, trg2); + trg1 != trg2; +} + +pattern hasMultipleIncomingTrainsition(v : Synchronization) { + find transition(_, src1, v); + find transition(_, src2, v); + src1 != src2; +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) { + find transition(_, v1, s); + find transition(_, v2, s); + CompositeElement.regions.vertices(r1, v1); + CompositeElement.regions.vertices(r2, v2); + r1 != r2; +} or { + find transition(_, s, v1); + find transition(_, s, v2); + CompositeElement.regions.vertices(r1, v1); + CompositeElement.regions.vertices(r2, v2); + r1 != r2; +} + +/////////////////////////////// +// Extra +// +//@Constraint(severity="error", message="error", key = {s}) +//pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) { +// find transition(_, v, s); +// neg find child(_,v); +//} or { +// find transition(_, s, v); +// neg find child(_,v); +//} + +pattern child(parent: CompositeElement, child: Vertex) { + CompositeElement.regions.vertices(parent, child); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) { + find transition(_, v, s); + find child(c,v); + neg find hasMultipleRegions(c); +} or { + find transition(_, s, v); + find child(c,v); + neg find hasMultipleRegions(c); +} + + +pattern hasMultipleRegions(composite: CompositeElement) { + CompositeElement.regions(composite,region1); + CompositeElement.regions(composite,region2); + region1 != region2; +} + +/** + * Simplifying model generation + */ +@Constraint(severity="error", message="error", key = {s}) +pattern synchThree(s: Synchronization) { + Transition.target(t1,s); + Transition.target(t2,s); + Transition.target(t3,s); + t1!=t2; + t2!=t3; + t1!=t3; +} or { + Transition.source(t1,s); + Transition.source(t2,s); + Transition.source(t3,s); + t1!=t2; + t2!=t3; + t1!=t3; +} + +/** + * Simplifying model generation + */ +@Constraint(severity="error", message="error", key = {s1,s2}) +pattern twoSynch(s1 : Synchronization, s2 : Synchronization) { + Synchronization(s1); + Synchronization(s2); + s1 != s2; +} + +/** + * Model generation task: at least one synch + */ +//@Constraint(severity="error", message="error", key = {s}) +//pattern noSynch(s:Statechart) { +// Statechart(s); +// neg find synch(_); +//} +//pattern synch(s:Synchronization) { +// Synchronization(s); +//} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java new file mode 100644 index 00000000..b8fafb35 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java @@ -0,0 +1,336 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; + +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * The Adapter Factory for the model. + * It provides an adapter createXXX method for each class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage + * @generated + */ +public class yakinduAdapterFactory extends AdapterFactoryImpl { + /** + * The cached model package. + * + * + * @generated + */ + protected static yakinduPackage modelPackage; + + /** + * Creates an instance of the adapter factory. + * + * + * @generated + */ + public yakinduAdapterFactory() { + if (modelPackage == null) { + modelPackage = yakinduPackage.eINSTANCE; + } + } + + /** + * Returns whether this factory is applicable for the type of the object. + * + * This implementation returns true if the object is either the model's package or is an instance object of the model. + * + * @return whether this factory is applicable for the type of the object. + * @generated + */ + @Override + public boolean isFactoryForType(Object object) { + if (object == modelPackage) { + return true; + } + if (object instanceof EObject) { + return ((EObject)object).eClass().getEPackage() == modelPackage; + } + return false; + } + + /** + * The switch that delegates to the createXXX methods. + * + * + * @generated + */ + protected yakinduSwitch modelSwitch = + new yakinduSwitch() { + @Override + public Adapter casePseudostate(Pseudostate object) { + return createPseudostateAdapter(); + } + @Override + public Adapter caseVertex(Vertex object) { + return createVertexAdapter(); + } + @Override + public Adapter caseRegion(Region object) { + return createRegionAdapter(); + } + @Override + public Adapter caseTransition(Transition object) { + return createTransitionAdapter(); + } + @Override + public Adapter caseStatechart(Statechart object) { + return createStatechartAdapter(); + } + @Override + public Adapter caseEntry(Entry object) { + return createEntryAdapter(); + } + @Override + public Adapter caseSynchronization(Synchronization object) { + return createSynchronizationAdapter(); + } + @Override + public Adapter caseState(State object) { + return createStateAdapter(); + } + @Override + public Adapter caseRegularState(RegularState object) { + return createRegularStateAdapter(); + } + @Override + public Adapter caseCompositeElement(CompositeElement object) { + return createCompositeElementAdapter(); + } + @Override + public Adapter caseChoice(Choice object) { + return createChoiceAdapter(); + } + @Override + public Adapter caseExit(Exit object) { + return createExitAdapter(); + } + @Override + public Adapter caseFinalState(FinalState object) { + return createFinalStateAdapter(); + } + @Override + public Adapter defaultCase(EObject object) { + return createEObjectAdapter(); + } + }; + + /** + * Creates an adapter for the target. + * + * + * @param target the object to adapt. + * @return the adapter for the target. + * @generated + */ + @Override + public Adapter createAdapter(Notifier target) { + return modelSwitch.doSwitch((EObject)target); + } + + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate + * @generated + */ + public Adapter createPseudostateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex + * @generated + */ + public Adapter createVertexAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region + * @generated + */ + public Adapter createRegionAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition + * @generated + */ + public Adapter createTransitionAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart + * @generated + */ + public Adapter createStatechartAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry + * @generated + */ + public Adapter createEntryAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization + * @generated + */ + public Adapter createSynchronizationAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State + * @generated + */ + public Adapter createStateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState + * @generated + */ + public Adapter createRegularStateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement + * @generated + */ + public Adapter createCompositeElementAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice + * @generated + */ + public Adapter createChoiceAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit + * @generated + */ + public Adapter createExitAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState + * @generated + */ + public Adapter createFinalStateAdapter() { + return null; + } + + /** + * Creates a new adapter for the default case. + * + * This default implementation returns null. + * + * @return the new adapter. + * @generated + */ + public Adapter createEObjectAdapter() { + return null; + } + +} //yakinduAdapterFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java new file mode 100644 index 00000000..fbc6f821 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java @@ -0,0 +1,378 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.util.Switch; + +/** + * + * The Switch for the model's inheritance hierarchy. + * It supports the call {@link #doSwitch(EObject) doSwitch(object)} + * to invoke the caseXXX method for each class of the model, + * starting with the actual class of the object + * and proceeding up the inheritance hierarchy + * until a non-null result is returned, + * which is the result of the switch. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage + * @generated + */ +public class yakinduSwitch extends Switch { + /** + * The cached model package + * + * + * @generated + */ + protected static yakinduPackage modelPackage; + + /** + * Creates an instance of the switch. + * + * + * @generated + */ + public yakinduSwitch() { + if (modelPackage == null) { + modelPackage = yakinduPackage.eINSTANCE; + } + } + + /** + * Checks whether this is a switch for the given package. + * + * + * @param ePackage the package in question. + * @return whether this is a switch for the given package. + * @generated + */ + @Override + protected boolean isSwitchFor(EPackage ePackage) { + return ePackage == modelPackage; + } + + /** + * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. + * + * + * @return the first non-null result returned by a caseXXX call. + * @generated + */ + @Override + protected T doSwitch(int classifierID, EObject theEObject) { + switch (classifierID) { + case yakinduPackage.PSEUDOSTATE: { + Pseudostate pseudostate = (Pseudostate)theEObject; + T result = casePseudostate(pseudostate); + if (result == null) result = caseVertex(pseudostate); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.VERTEX: { + Vertex vertex = (Vertex)theEObject; + T result = caseVertex(vertex); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.REGION: { + Region region = (Region)theEObject; + T result = caseRegion(region); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.TRANSITION: { + Transition transition = (Transition)theEObject; + T result = caseTransition(transition); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.STATECHART: { + Statechart statechart = (Statechart)theEObject; + T result = caseStatechart(statechart); + if (result == null) result = caseCompositeElement(statechart); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.ENTRY: { + Entry entry = (Entry)theEObject; + T result = caseEntry(entry); + if (result == null) result = casePseudostate(entry); + if (result == null) result = caseVertex(entry); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.SYNCHRONIZATION: { + Synchronization synchronization = (Synchronization)theEObject; + T result = caseSynchronization(synchronization); + if (result == null) result = casePseudostate(synchronization); + if (result == null) result = caseVertex(synchronization); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.STATE: { + State state = (State)theEObject; + T result = caseState(state); + if (result == null) result = caseRegularState(state); + if (result == null) result = caseCompositeElement(state); + if (result == null) result = caseVertex(state); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.REGULAR_STATE: { + RegularState regularState = (RegularState)theEObject; + T result = caseRegularState(regularState); + if (result == null) result = caseVertex(regularState); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.COMPOSITE_ELEMENT: { + CompositeElement compositeElement = (CompositeElement)theEObject; + T result = caseCompositeElement(compositeElement); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.CHOICE: { + Choice choice = (Choice)theEObject; + T result = caseChoice(choice); + if (result == null) result = casePseudostate(choice); + if (result == null) result = caseVertex(choice); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.EXIT: { + Exit exit = (Exit)theEObject; + T result = caseExit(exit); + if (result == null) result = casePseudostate(exit); + if (result == null) result = caseVertex(exit); + if (result == null) result = defaultCase(theEObject); + return result; + } + case yakinduPackage.FINAL_STATE: { + FinalState finalState = (FinalState)theEObject; + T result = caseFinalState(finalState); + if (result == null) result = caseRegularState(finalState); + if (result == null) result = caseVertex(finalState); + if (result == null) result = defaultCase(theEObject); + return result; + } + default: return defaultCase(theEObject); + } + } + + /** + * Returns the result of interpreting the object as an instance of 'Pseudostate'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Pseudostate'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T casePseudostate(Pseudostate object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Vertex'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Vertex'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseVertex(Vertex object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Region'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Region'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseRegion(Region object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Transition'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Transition'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseTransition(Transition object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Statechart'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Statechart'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseStatechart(Statechart object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Entry'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Entry'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseEntry(Entry object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Synchronization'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Synchronization'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseSynchronization(Synchronization object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseState(State object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Regular State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Regular State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseRegularState(RegularState object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Composite Element'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Composite Element'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseCompositeElement(CompositeElement object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Choice'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Choice'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseChoice(Choice object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Exit'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Exit'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseExit(Exit object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Final State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Final State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFinalState(FinalState object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'EObject'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch, but this is the last case anyway. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'EObject'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) + * @generated + */ + @Override + public T defaultCase(EObject object) { + return null; + } + +} //yakinduSwitch diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java new file mode 100644 index 00000000..6d437ecb --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java @@ -0,0 +1,114 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.ecore.EFactory; + +/** + * + * The Factory for the model. + * It provides a create method for each non-abstract class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage + * @generated + */ +public interface yakinduFactory extends EFactory { + /** + * The singleton instance of the factory. + * + * + * @generated + */ + yakinduFactory eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduFactoryImpl.init(); + + /** + * Returns a new object of class 'Region'. + * + * + * @return a new object of class 'Region'. + * @generated + */ + Region createRegion(); + + /** + * Returns a new object of class 'Transition'. + * + * + * @return a new object of class 'Transition'. + * @generated + */ + Transition createTransition(); + + /** + * Returns a new object of class 'Statechart'. + * + * + * @return a new object of class 'Statechart'. + * @generated + */ + Statechart createStatechart(); + + /** + * Returns a new object of class 'Entry'. + * + * + * @return a new object of class 'Entry'. + * @generated + */ + Entry createEntry(); + + /** + * Returns a new object of class 'Synchronization'. + * + * + * @return a new object of class 'Synchronization'. + * @generated + */ + Synchronization createSynchronization(); + + /** + * Returns a new object of class 'State'. + * + * + * @return a new object of class 'State'. + * @generated + */ + State createState(); + + /** + * Returns a new object of class 'Choice'. + * + * + * @return a new object of class 'Choice'. + * @generated + */ + Choice createChoice(); + + /** + * Returns a new object of class 'Exit'. + * + * + * @return a new object of class 'Exit'. + * @generated + */ + Exit createExit(); + + /** + * Returns a new object of class 'Final State'. + * + * + * @return a new object of class 'Final State'. + * @generated + */ + FinalState createFinalState(); + + /** + * Returns the package supported by this factory. + * + * + * @return the package supported by this factory. + * @generated + */ + yakinduPackage getyakinduPackage(); + +} //yakinduFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java new file mode 100644 index 00000000..b3b14944 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java @@ -0,0 +1,1038 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +/** + * + * The Package for the model. + * It contains accessors for the meta objects to represent + *

    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduFactory + * @model kind="package" + * @generated + */ +public interface yakinduPackage extends EPackage { + /** + * The package name. + * + * + * @generated + */ + String eNAME = "yakindu"; + + /** + * The package namespace URI. + * + * + * @generated + */ + String eNS_URI = "YakinduMetamodel"; + + /** + * The package namespace name. + * + * + * @generated + */ + String eNS_PREFIX = "yakindu"; + + /** + * The singleton instance of the package. + * + * + * @generated + */ + yakinduPackage eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl.init(); + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getVertex() + * @generated + */ + int VERTEX = 1; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int VERTEX__INCOMING_TRANSITIONS = 0; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int VERTEX__OUTGOING_TRANSITIONS = 1; + + /** + * The number of structural features of the 'Vertex' class. + * + * + * @generated + * @ordered + */ + int VERTEX_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Vertex' class. + * + * + * @generated + * @ordered + */ + int VERTEX_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getPseudostate() + * @generated + */ + int PSEUDOSTATE = 0; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Pseudostate' class. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Pseudostate' class. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegion() + * @generated + */ + int REGION = 2; + + /** + * The feature id for the 'Vertices' containment reference list. + * + * + * @generated + * @ordered + */ + int REGION__VERTICES = 0; + + /** + * The number of structural features of the 'Region' class. + * + * + * @generated + * @ordered + */ + int REGION_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'Region' class. + * + * + * @generated + * @ordered + */ + int REGION_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getTransition() + * @generated + */ + int TRANSITION = 3; + + /** + * The feature id for the 'Target' reference. + * + * + * @generated + * @ordered + */ + int TRANSITION__TARGET = 0; + + /** + * The feature id for the 'Source' container reference. + * + * + * @generated + * @ordered + */ + int TRANSITION__SOURCE = 1; + + /** + * The number of structural features of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getCompositeElement() + * @generated + */ + int COMPOSITE_ELEMENT = 9; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT__REGIONS = 0; + + /** + * The number of structural features of the 'Composite Element' class. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'Composite Element' class. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getStatechart() + * @generated + */ + int STATECHART = 4; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATECHART__REGIONS = COMPOSITE_ELEMENT__REGIONS; + + /** + * The number of structural features of the 'Statechart' class. + * + * + * @generated + * @ordered + */ + int STATECHART_FEATURE_COUNT = COMPOSITE_ELEMENT_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Statechart' class. + * + * + * @generated + * @ordered + */ + int STATECHART_OPERATION_COUNT = COMPOSITE_ELEMENT_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getEntry() + * @generated + */ + int ENTRY = 5; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int ENTRY__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int ENTRY__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Entry' class. + * + * + * @generated + * @ordered + */ + int ENTRY_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Entry' class. + * + * + * @generated + * @ordered + */ + int ENTRY_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getSynchronization() + * @generated + */ + int SYNCHRONIZATION = 6; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Synchronization' class. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Synchronization' class. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegularState() + * @generated + */ + int REGULAR_STATE = 8; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Regular State' class. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Regular State' class. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getState() + * @generated + */ + int STATE = 7; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATE__REGIONS = REGULAR_STATE_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'State' class. + * + * + * @generated + * @ordered + */ + int STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'State' class. + * + * + * @generated + * @ordered + */ + int STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getChoice() + * @generated + */ + int CHOICE = 10; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int CHOICE__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int CHOICE__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Choice' class. + * + * + * @generated + * @ordered + */ + int CHOICE_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Choice' class. + * + * + * @generated + * @ordered + */ + int CHOICE_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getExit() + * @generated + */ + int EXIT = 11; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int EXIT__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int EXIT__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Exit' class. + * + * + * @generated + * @ordered + */ + int EXIT_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Exit' class. + * + * + * @generated + * @ordered + */ + int EXIT_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getFinalState() + * @generated + */ + int FINAL_STATE = 12; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int FINAL_STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int FINAL_STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Final State' class. + * + * + * @generated + * @ordered + */ + int FINAL_STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Final State' class. + * + * + * @generated + * @ordered + */ + int FINAL_STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; + + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. + * + * + * @return the meta object for class 'Pseudostate'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate + * @generated + */ + EClass getPseudostate(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. + * + * + * @return the meta object for class 'Vertex'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex + * @generated + */ + EClass getVertex(); + + /** + * Returns the meta object for the reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions Incoming Transitions}'. + * + * + * @return the meta object for the reference list 'Incoming Transitions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions() + * @see #getVertex() + * @generated + */ + EReference getVertex_IncomingTransitions(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}'. + * + * + * @return the meta object for the containment reference list 'Outgoing Transitions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions() + * @see #getVertex() + * @generated + */ + EReference getVertex_OutgoingTransitions(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. + * + * + * @return the meta object for class 'Region'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region + * @generated + */ + EClass getRegion(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices Vertices}'. + * + * + * @return the meta object for the containment reference list 'Vertices'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices() + * @see #getRegion() + * @generated + */ + EReference getRegion_Vertices(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. + * + * + * @return the meta object for class 'Transition'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition + * @generated + */ + EClass getTransition(); + + /** + * Returns the meta object for the reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}'. + * + * + * @return the meta object for the reference 'Target'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget() + * @see #getTransition() + * @generated + */ + EReference getTransition_Target(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}'. + * + * + * @return the meta object for the container reference 'Source'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource() + * @see #getTransition() + * @generated + */ + EReference getTransition_Source(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. + * + * + * @return the meta object for class 'Statechart'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart + * @generated + */ + EClass getStatechart(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. + * + * + * @return the meta object for class 'Entry'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry + * @generated + */ + EClass getEntry(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. + * + * + * @return the meta object for class 'Synchronization'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization + * @generated + */ + EClass getSynchronization(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. + * + * + * @return the meta object for class 'State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State + * @generated + */ + EClass getState(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. + * + * + * @return the meta object for class 'Regular State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState + * @generated + */ + EClass getRegularState(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. + * + * + * @return the meta object for class 'Composite Element'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement + * @generated + */ + EClass getCompositeElement(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions Regions}'. + * + * + * @return the meta object for the containment reference list 'Regions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions() + * @see #getCompositeElement() + * @generated + */ + EReference getCompositeElement_Regions(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. + * + * + * @return the meta object for class 'Choice'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice + * @generated + */ + EClass getChoice(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. + * + * + * @return the meta object for class 'Exit'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit + * @generated + */ + EClass getExit(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. + * + * + * @return the meta object for class 'Final State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState + * @generated + */ + EClass getFinalState(); + + /** + * Returns the factory that creates the instances of the model. + * + * + * @return the factory that creates the instances of the model. + * @generated + */ + yakinduFactory getyakinduFactory(); + + /** + * + * Defines literals for the meta objects that represent + *
    + *
  • each class,
  • + *
  • each feature of each class,
  • + *
  • each operation of each class,
  • + *
  • each enum,
  • + *
  • and each data type
  • + *
+ * + * @generated + */ + interface Literals { + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getPseudostate() + * @generated + */ + EClass PSEUDOSTATE = eINSTANCE.getPseudostate(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getVertex() + * @generated + */ + EClass VERTEX = eINSTANCE.getVertex(); + + /** + * The meta object literal for the 'Incoming Transitions' reference list feature. + * + * + * @generated + */ + EReference VERTEX__INCOMING_TRANSITIONS = eINSTANCE.getVertex_IncomingTransitions(); + + /** + * The meta object literal for the 'Outgoing Transitions' containment reference list feature. + * + * + * @generated + */ + EReference VERTEX__OUTGOING_TRANSITIONS = eINSTANCE.getVertex_OutgoingTransitions(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegion() + * @generated + */ + EClass REGION = eINSTANCE.getRegion(); + + /** + * The meta object literal for the 'Vertices' containment reference list feature. + * + * + * @generated + */ + EReference REGION__VERTICES = eINSTANCE.getRegion_Vertices(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getTransition() + * @generated + */ + EClass TRANSITION = eINSTANCE.getTransition(); + + /** + * The meta object literal for the 'Target' reference feature. + * + * + * @generated + */ + EReference TRANSITION__TARGET = eINSTANCE.getTransition_Target(); + + /** + * The meta object literal for the 'Source' container reference feature. + * + * + * @generated + */ + EReference TRANSITION__SOURCE = eINSTANCE.getTransition_Source(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getStatechart() + * @generated + */ + EClass STATECHART = eINSTANCE.getStatechart(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getEntry() + * @generated + */ + EClass ENTRY = eINSTANCE.getEntry(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getSynchronization() + * @generated + */ + EClass SYNCHRONIZATION = eINSTANCE.getSynchronization(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getState() + * @generated + */ + EClass STATE = eINSTANCE.getState(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegularState() + * @generated + */ + EClass REGULAR_STATE = eINSTANCE.getRegularState(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getCompositeElement() + * @generated + */ + EClass COMPOSITE_ELEMENT = eINSTANCE.getCompositeElement(); + + /** + * The meta object literal for the 'Regions' containment reference list feature. + * + * + * @generated + */ + EReference COMPOSITE_ELEMENT__REGIONS = eINSTANCE.getCompositeElement_Regions(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getChoice() + * @generated + */ + EClass CHOICE = eINSTANCE.getChoice(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getExit() + * @generated + */ + EClass EXIT = eINSTANCE.getExit(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getFinalState() + * @generated + */ + EClass FINAL_STATE = eINSTANCE.getFinalState(); + + } + +} //yakinduPackage -- cgit v1.2.3-54-g00ecf From 1da40b0bf07319bdb2e9a89f8d7d6ecfbc638952 Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Sat, 16 Feb 2019 15:45:14 -0500 Subject: Integrate queries partially #19 --- .../.classpath | 1 + .../.project | 6 + .../META-INF/MANIFEST.MF | 34 +- .../build.properties | 4 +- .../configurations/ecore.vsconfig | 5 +- .../configurations/fam.vsconfig | 4 +- .../configurations/fileSystem.vsconfig | 4 +- .../configurations/yakindu.vsconfig | 6 +- .../metamodels/fam.ecore | 4 +- .../metamodels/filesystem.ecore | 2 +- .../outputs/fam/debug/errors.txt | 114 + .../fam/debug/generated3valued.vql_deactivated | 32522 +++++++++++++++++++ .../outputs/fam/debug/generation.logicproblem | 2 +- .../outputs/fam/debug/problem.als | 203 + .../outputs/fam/log.txt | 2 +- .../outputs/fam/models/1.gml | 6779 ++++ .../outputs/fam/models/1.png | Bin 141462 -> 159195 bytes .../outputs/fam/models/1.xmi | 13 +- .../outputs/fam/models/2.gml | 6874 ++++ .../outputs/fam/models/2.png | Bin 151601 -> 177546 bytes .../outputs/fam/models/2.xmi | 13 +- .../outputs/fam/models/3.gml | 5613 ++++ .../outputs/fam/models/3.png | Bin 157309 -> 177661 bytes .../outputs/fam/models/3.xmi | 13 +- .../outputs/fam/models/4.gml | 1136 + .../outputs/fam/models/4.png | Bin 162587 -> 189772 bytes .../outputs/fam/models/4.xmi | 11 +- .../outputs/fam/models/5.gml | 1155 + .../outputs/fam/models/5.png | Bin 168585 -> 194199 bytes .../outputs/fam/models/5.xmi | 11 +- .../outputs/fam/statistics.csv | 16 + .../outputs/yakindu/debug/errors.txt | 54 + .../yakindu/debug/generated3valued.vql_deactivated | 23532 ++++++++++++++ .../outputs/yakindu/debug/generation.logicproblem | 277 +- .../outputs/yakindu/debug/init.partialmodel | 47 +- .../outputs/yakindu/log.txt | 2 +- .../outputs/yakindu/models/1.gml | 4304 +++ .../outputs/yakindu/models/1.png | Bin 30880 -> 33827 bytes .../outputs/yakindu/models/1.xmi | 16 +- .../outputs/yakindu/models/2.gml | 3692 +++ .../outputs/yakindu/models/2.png | Bin 36094 -> 29697 bytes .../outputs/yakindu/models/2.xmi | 15 +- .../outputs/yakindu/statistics.csv | 20 + .../plugin.xml | 168 +- .../test/ecore/queries/ecorePatterns.vql | 29 + .../standalone/test/fam/queries/famPatterns.vql | 103 + .../test/filesystem/queries/FileSystemPatterns.vql | 24 + .../yakindu/queries/yakinduMutatedPatterns.vql | 270 + .../test/yakindu/queries/yakinduPatterns.vql | 227 + .../standalone/test/ecore/queries/.gitignore | 13 + .../standalone/test/fam/queries/.gitignore | 10 + .../test/fam/queries/TerminatorAndInformation.java | 747 + .../standalone/test/fam/queries/Type.java | 770 + .../standalone/test/filesystem/queries/.gitignore | 9 + .../standalone/test/yakindu/queries/.gitignore | 158 + .../standalone/test/yakindu/queries/Child.java | 721 + .../test/yakindu/queries/ChoiceHasNoIncoming.java | 551 + .../test/yakindu/queries/ChoiceHasNoOutgoing.java | 559 + .../test/yakindu/queries/EntryInRegion.java | 702 + .../queries/HasMultipleIncomingTrainsition.java | 549 + .../queries/HasMultipleOutgoingTrainsition.java | 549 + .../test/yakindu/queries/HasMultipleRegions.java | 555 + .../test/yakindu/queries/IncomingToEntry.java | 703 + .../queries/MultipleTransitionFromEntry.java | 827 + .../test/yakindu/queries/NoEntryInRegion.java | 550 + .../queries/NoOutgoingTransitionFromEntry.java | 551 + .../test/yakindu/queries/NoStateInRegion.java | 558 + .../yakindu/queries/NotSynchronizingStates.java | 554 + .../test/yakindu/queries/OutgoingFromExit.java | 715 + .../test/yakindu/queries/OutgoingFromFinal.java | 715 + .../test/yakindu/queries/StateInRegion.java | 694 + .../test/yakindu/queries/SynchHasNoIncoming.java | 551 + .../test/yakindu/queries/SynchHasNoOutgoing.java | 559 + .../test/yakindu/queries/SynchThree.java | 639 + .../queries/SynchronizedIncomingInSameRegion.java | 888 + ...nchronizedRegionDoesNotHaveMultipleRegions.java | 744 + .../queries/SynchronizedRegionsAreNotSiblings.java | 902 + .../test/yakindu/queries/Transition.java | 808 + .../standalone/test/yakindu/queries/TwoSynch.java | 714 + .../standalone/test/ecore/queries/Ecore.vql | 29 - .../dslreasoner/standalone/test/fam/Function.java | 2 +- .../standalone/test/fam/FunctionalElement.java | 2 +- .../standalone/test/fam/impl/famPackageImpl.java | 4 +- .../standalone/test/fam/queries/famPatterns.vql | 103 - .../test/filesystem/queries/FileSystem.vql | 24 - .../yakindu/queries/yakinduMutatedPatterns.vql | 270 - .../test/yakindu/queries/yakinduPatterns.vql | 227 - 87 files changed, 104682 insertions(+), 871 deletions(-) create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/problem.als create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/TerminatorAndInformation.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/.gitignore create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/.gitignore create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Child.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoIncoming.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoOutgoing.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/EntryInRegion.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleIncomingTrainsition.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleOutgoingTrainsition.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleRegions.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/IncomingToEntry.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/MultipleTransitionFromEntry.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoEntryInRegion.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoOutgoingTransitionFromEntry.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoStateInRegion.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NotSynchronizingStates.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromExit.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromFinal.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/StateInRegion.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoIncoming.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoOutgoing.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchThree.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedIncomingInSameRegion.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionDoesNotHaveMultipleRegions.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionsAreNotSiblings.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Transition.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/TwoSynch.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql (limited to 'Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone') 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 @@ + 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 @@ -5,6 +5,11 @@ + + org.eclipse.xtext.ui.shared.xtextBuilder + + + org.eclipse.viatra.query.tooling.ui.projectbuilder @@ -30,5 +35,6 @@ org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature org.eclipse.viatra.query.projectnature + org.eclipse.xtext.ui.shared.xtextNature 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 Bundle-ClassPath: . Bundle-Vendor: %providerName Bundle-Localization: plugin -Export-Package: ca.mcgill.ecse.dslreasoner.standalone.test.fam, - ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl, - ca.mcgill.ecse.dslreasoner.standalone.test.fam.util, - ca.mcgill.ecse.dslreasoner.standalone.test.yakindu, - ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl, - ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util, - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem, - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl, - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util +Export-Package: ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries, + ca.mcgill.ecse.dslreasoner.standalone.test.fam, + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl, + ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries, + ca.mcgill.ecse.dslreasoner.standalone.test.fam.util, + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem, + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl, + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries, + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util, + ca.mcgill.ecse.dslreasoner.standalone.test.yakindu, + ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl, + ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries, + ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util Require-Bundle: org.eclipse.viatra.addon.querybasedfeatures.runtime, - org.eclipse.core.runtime;bundle-version="3.13.0", - org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport, - org.eclipse.viatra.query.runtime;bundle-version="2.1.0", - org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.0", - org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.0", - org.eclipse.xtext.xbase.lib;bundle-version="2.12.0" + org.eclipse.core.runtime;bundle-version="3.13.0", + org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport, + org.eclipse.viatra.query.runtime;bundle-version="2.1.0", + org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.0", + org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.0", + org.eclipse.xtext.xbase.lib;bundle-version="2.12.0" Import-Package: org.apache.log4j Automatic-Module-Name: ca.mcgill.ecse.dslreasoner.standalone.test Bundle-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/,\ plugin.properties jars.compile.order = . -source.. = src/ +source.. = src/,\ + src-gen/,\ + queries/ output.. = 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 @@ import epackage "http://www.eclipse.org/emf/2002/Ecore" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns" metamodel allSupported { package ecore excluding { EClassifier.instanceClass,EClassifier.defaultValue,EEnumLiteral.instance,EStructuralFeature.defaultValue, @@ -9,7 +10,7 @@ metamodel allSupported { package ecore excluding { generate { metamodel = allSupported - //constraints = { ... } +// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries} partial-model = { "platform:/resource/Ecore-Plugin/InitialPackage.ecore" } solver = ViatraSolver scope = { @@ -23,7 +24,7 @@ generate { log-level = normal } - number = 5 + number = 3 runs = 1 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 @@ import epackage "FamMetamodel" -//import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.queries.fam.FamPatterns" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns" generate { metamodel = { package fam } -// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries} partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/famInstance.xmi"} solver = ViatraSolver 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 @@ import epackage "FileSystemMetamodel" -//import viatra "" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns" generate { metamodel = { package filesystem } -// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries} partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/filesystemInstance.xmi"} solver = ViatraSolver 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 @@ import epackage "YakinduMetamodel" -//import viatra "" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns" generate { metamodel = { package yakindu } -// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries } partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/yakinduInstance.xmi"} solver = ViatraSolver scope = { - #node = 5 + #node = 6 } 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 @@ -
+
-
+
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 @@ -
+
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 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108) + org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41) + com.google.common.collect.Iterators$6.computeNext(Iterators.java:617) + com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145) + com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140) + com.google.common.collect.Iterators.addAll(Iterators.java:366) + com.google.common.collect.Iterables.addAll(Iterables.java:332) + com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383) + org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): + hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder.Alloy2LogicMapper.transformOutput(Alloy2LogicMapper.java:53) + hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver.solve(AlloySolver.java:66) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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 + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) + hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) + hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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". +Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class] + hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + 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". +Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class] + hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 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( find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); } +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FunctionalElement class". + */ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); +} + +/** + * An element may be an instance of type "FunctionalElement class". + */ +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Function class". + */ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); +} + +/** + * An element may be an instance of type "Function class". + */ +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FAMTerminator class". + */ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); +} + +/** + * An element may be an instance of type "FAMTerminator class". + */ +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); +} + +/** + * An element may be an instance of type "InformationLink class". + */ +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); +} + +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); +} + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); +} + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + */ +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) + */ +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) + */ +private pattern mustInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) + */ +private pattern mayInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); +} +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); +} +pattern refineRelation_type_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FunctionalElement class". + */ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); +} + +/** + * An element may be an instance of type "FunctionalElement class". + */ +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Function class". + */ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); +} + +/** + * An element may be an instance of type "Function class". + */ +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FAMTerminator class". + */ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); +} + +/** + * An element may be an instance of type "FAMTerminator class". + */ +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); +} + +/** + * An element may be an instance of type "InformationLink class". + */ +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); +} + +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); +} + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); +} + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + */ +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) + */ +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) + */ +private pattern mustInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) + */ +private pattern mayInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); +} +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); +} +pattern refineRelation_type_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "EAttribute class". + */ +private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAttribute class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAttribute class"); +} + +/** + * An element may be an instance of type "EAttribute class". + */ +private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EAnnotation class". + */ +private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAnnotation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAnnotation class"); +} + +/** + * An element may be an instance of type "EAnnotation class". + */ +private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClass class". + */ +private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClass class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClass class"); +} + +/** + * An element may be an instance of type "EClass class". + */ +private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClass_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClassifier class". + */ +private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClassifier class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClassifier class"); +} + +/** + * An element may be an instance of type "EClassifier class". + */ +private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EDataType class". + */ +private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EDataType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EDataType class"); +} + +/** + * An element may be an instance of type "EDataType class". + */ +private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnum class". + */ +private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnum class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnum class"); +} + +/** + * An element may be an instance of type "EEnum class". + */ +private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnumLiteral class". + */ +private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnumLiteral class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnumLiteral class"); +} + +/** + * An element may be an instance of type "EEnumLiteral class". + */ +private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class". + */ +private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class"); +} + +/** + * An element may be an instance of type "EModelElement class". + */ +private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class". + */ +private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class"); +} + +/** + * An element may be an instance of type "ENamedElement class". + */ +private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EObject class". + */ +private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EObject class"); +} + +/** + * An element may be an instance of type "EObject class". + */ +private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EOperation class". + */ +private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EOperation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EOperation class"); +} + +/** + * An element may be an instance of type "EOperation class". + */ +private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class". + */ +private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class"); +} + +/** + * An element may be an instance of type "EPackage class". + */ +private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EParameter class". + */ +private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EParameter class"); +} + +/** + * An element may be an instance of type "EParameter class". + */ +private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EReference class". + */ +private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EReference class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EReference class"); +} + +/** + * An element may be an instance of type "EReference class". + */ +private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEReference_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStructuralFeature class". + */ +private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStructuralFeature class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStructuralFeature class"); +} + +/** + * An element may be an instance of type "EStructuralFeature class". + */ +private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypedElement class". + */ +private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypedElement class"); +} + +/** + * An element may be an instance of type "ETypedElement class". + */ +private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStringToStringMapEntry class". + */ +private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStringToStringMapEntry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStringToStringMapEntry class"); +} + +/** + * An element may be an instance of type "EStringToStringMapEntry class". + */ +private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EGenericType class". + */ +private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EGenericType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EGenericType class"); +} + +/** + * An element may be an instance of type "EGenericType class". + */ +private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypeParameter class". + */ +private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypeParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypeParameter class"); +} + +/** + * An element may be an instance of type "ETypeParameter class". + */ +private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class DefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class DefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class DefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class DefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class DefinedPart". + */ +private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class DefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class DefinedPart". + */ +private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class UndefinedPart". + */ +private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class UndefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class UndefinedPart". + */ +private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + */ +private pattern mustInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + */ +private pattern mayInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + find mayInstanceOfEDataType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + */ +private pattern mustInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + */ +private pattern mayInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + */ +private pattern mustInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + */ +private pattern mayInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEModelElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + */ +private pattern mustInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + */ +private pattern mayInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + */ +private pattern mustInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + */ +private pattern mayInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); +} or { + find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + */ +private pattern mustInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + */ +private pattern mayInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + */ +private pattern mustInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + */ +private pattern mayInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + */ +private pattern mustInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + */ +private pattern mayInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + */ +private pattern mustInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + */ +private pattern mayInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + */ +private pattern mustInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + */ +private pattern mayInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); +} or { + find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); +} or { + find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + */ +private pattern mustInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + */ +private pattern mayInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); +} or { + find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + */ +private pattern mustInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + */ +private pattern mayInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + */ +private pattern mustInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + */ +private pattern mayInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnum_class(problem,interpretation,source); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + */ +private pattern mustInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + */ +private pattern mayInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + find mayInstanceOfEEnum_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + */ +private pattern mustInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + */ +private pattern mayInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEModelElement_class(problem,interpretation,source); + find mayInstanceOfEAnnotation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + */ +private pattern mustInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + */ +private pattern mayInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); +} or { + find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + */ +private pattern mustInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + */ +private pattern mayInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + */ +private pattern mustInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + */ +private pattern mayInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + */ +private pattern mustInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + */ +private pattern mayInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + */ +private pattern mustInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + */ +private pattern mayInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEParameter_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) + */ +private pattern mustInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) + */ +private pattern mayInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + */ +private pattern mustInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + */ +private pattern mayInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + */ +private pattern mustInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + */ +private pattern mayInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + */ +private pattern mustInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + */ +private pattern mayInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + */ +private pattern mustInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + */ +private pattern mayInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + */ +private pattern mustInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + */ +private pattern mayInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + */ +private pattern mustInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + */ +private pattern mayInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + */ +private pattern mustInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + */ +private pattern mayInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + */ +private pattern mustInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + */ +private pattern mayInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + */ +private pattern mustInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + */ +private pattern mayInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypeParameter_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + */ +private pattern mustInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + */ +private pattern mayInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + */ +private pattern mustInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + */ +private pattern mayInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + */ +private pattern mustInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + */ +private pattern mayInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface attribute EClass(source,target) + */ +private pattern mustInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + */ +private pattern mayInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + */ +private pattern mustInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + */ +private pattern mayInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEDataType_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + */ +private pattern mustInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + */ +private pattern mayInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfENamedElement_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + */ +private pattern mustInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + */ +private pattern mayInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + */ +private pattern mustInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + */ +private pattern mayInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []containment attribute EReference(source,target) + */ +private pattern mustInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>containment attribute EReference(source,target) + */ +private pattern mayInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []container attribute EReference(source,target) + */ +private pattern mustInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>container attribute EReference(source,target) + */ +private pattern mayInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) + */ +private pattern mustInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + */ +private pattern mayInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + */ +private pattern mustInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + */ +private pattern mayInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + */ +private pattern mustInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + */ +private pattern mayInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + */ +private pattern mustInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + */ +private pattern mayInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + */ +private pattern mustInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + */ +private pattern mayInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or + + { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or + + { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or + + { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustInstanceOfEAttribute_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustInstanceOfEReference_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfETypeParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClass_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAnnotation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAttribute_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClassifier_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEGenericType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEDataType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEOperation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEReference_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnum_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); + find mustInstanceOfEModelElement_class(problem,interpretation,container); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); + find mustInstanceOfEClassifier_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class_by_contents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); + find mustInstanceOfETypedElement_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); + find mustInstanceOfETypeParameter_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); + find mustInstanceOfEEnum_class(problem,interpretation,container); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} +pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_eAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + find mustInstanceOfEDataType_class(problem,interpretation,to); + find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_references_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + find mustInstanceOfEObject_class(problem,interpretation,to); + find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_eSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEOperation_class(problem,interpretation,to); + find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); + find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEGenericType_class(problem,interpretation,to); + find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEOperation_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); +} +pattern refineRelation_eOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_eRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfETypeParameter_class(problem,interpretation,to); + find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_iD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_source_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + StringElement(to); + find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_abstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_interface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_instanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_instanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_serializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEDataType_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_literal_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + StringElement(to); + find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_name_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfENamedElement_class(problem,interpretation,from); + StringElement(to); + find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); +} +pattern refineRelation_nsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_nsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_containment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_container_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_resolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_changeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_volatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_transient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + StringElement(to); + find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_unsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_derived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_ordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_unique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_lowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_upperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_many_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_required_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_key_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "EAttribute class". + */ +private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAttribute class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAttribute class"); +} + +/** + * An element may be an instance of type "EAttribute class". + */ +private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EAnnotation class". + */ +private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAnnotation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAnnotation class"); +} + +/** + * An element may be an instance of type "EAnnotation class". + */ +private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClass class". + */ +private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClass class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClass class"); +} + +/** + * An element may be an instance of type "EClass class". + */ +private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClass_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClassifier class". + */ +private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClassifier class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClassifier class"); +} + +/** + * An element may be an instance of type "EClassifier class". + */ +private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EDataType class". + */ +private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EDataType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EDataType class"); +} + +/** + * An element may be an instance of type "EDataType class". + */ +private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnum class". + */ +private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnum class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnum class"); +} + +/** + * An element may be an instance of type "EEnum class". + */ +private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnumLiteral class". + */ +private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnumLiteral class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnumLiteral class"); +} + +/** + * An element may be an instance of type "EEnumLiteral class". + */ +private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class". + */ +private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class"); +} + +/** + * An element may be an instance of type "EModelElement class". + */ +private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class". + */ +private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class"); +} + +/** + * An element may be an instance of type "ENamedElement class". + */ +private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EObject class". + */ +private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EObject class"); +} + +/** + * An element may be an instance of type "EObject class". + */ +private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EOperation class". + */ +private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EOperation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EOperation class"); +} + +/** + * An element may be an instance of type "EOperation class". + */ +private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class". + */ +private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class"); +} + +/** + * An element may be an instance of type "EPackage class". + */ +private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EParameter class". + */ +private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EParameter class"); +} + +/** + * An element may be an instance of type "EParameter class". + */ +private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EReference class". + */ +private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EReference class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EReference class"); +} + +/** + * An element may be an instance of type "EReference class". + */ +private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEReference_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStructuralFeature class". + */ +private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStructuralFeature class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStructuralFeature class"); +} + +/** + * An element may be an instance of type "EStructuralFeature class". + */ +private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypedElement class". + */ +private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypedElement class"); +} + +/** + * An element may be an instance of type "ETypedElement class". + */ +private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStringToStringMapEntry class". + */ +private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStringToStringMapEntry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStringToStringMapEntry class"); +} + +/** + * An element may be an instance of type "EStringToStringMapEntry class". + */ +private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EGenericType class". + */ +private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EGenericType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EGenericType class"); +} + +/** + * An element may be an instance of type "EGenericType class". + */ +private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypeParameter class". + */ +private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypeParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypeParameter class"); +} + +/** + * An element may be an instance of type "ETypeParameter class". + */ +private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class DefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class DefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class DefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class DefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class DefinedPart". + */ +private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class DefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class DefinedPart". + */ +private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class UndefinedPart". + */ +private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class UndefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class UndefinedPart". + */ +private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + */ +private pattern mustInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + */ +private pattern mayInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + find mayInstanceOfEDataType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + */ +private pattern mustInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + */ +private pattern mayInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + */ +private pattern mustInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + */ +private pattern mayInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEModelElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + */ +private pattern mustInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + */ +private pattern mayInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + */ +private pattern mustInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + */ +private pattern mayInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); +} or { + find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + */ +private pattern mustInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + */ +private pattern mayInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + */ +private pattern mustInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + */ +private pattern mayInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + */ +private pattern mustInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + */ +private pattern mayInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + */ +private pattern mustInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + */ +private pattern mayInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + */ +private pattern mustInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + */ +private pattern mayInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); +} or { + find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); +} or { + find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + */ +private pattern mustInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + */ +private pattern mayInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); +} or { + find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + */ +private pattern mustInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + */ +private pattern mayInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + */ +private pattern mustInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + */ +private pattern mayInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnum_class(problem,interpretation,source); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + */ +private pattern mustInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + */ +private pattern mayInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + find mayInstanceOfEEnum_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + */ +private pattern mustInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + */ +private pattern mayInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEModelElement_class(problem,interpretation,source); + find mayInstanceOfEAnnotation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + */ +private pattern mustInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + */ +private pattern mayInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); +} or { + find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + */ +private pattern mustInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + */ +private pattern mayInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + */ +private pattern mustInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + */ +private pattern mayInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + */ +private pattern mustInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + */ +private pattern mayInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + */ +private pattern mustInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + */ +private pattern mayInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEParameter_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) + */ +private pattern mustInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) + */ +private pattern mayInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + */ +private pattern mustInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + */ +private pattern mayInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + */ +private pattern mustInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + */ +private pattern mayInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + */ +private pattern mustInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + */ +private pattern mayInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + */ +private pattern mustInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + */ +private pattern mayInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + */ +private pattern mustInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + */ +private pattern mayInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + */ +private pattern mustInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + */ +private pattern mayInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + */ +private pattern mustInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + */ +private pattern mayInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + */ +private pattern mustInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + */ +private pattern mayInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + */ +private pattern mustInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + */ +private pattern mayInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypeParameter_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + */ +private pattern mustInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + */ +private pattern mayInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + */ +private pattern mustInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + */ +private pattern mayInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + */ +private pattern mustInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + */ +private pattern mayInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface attribute EClass(source,target) + */ +private pattern mustInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + */ +private pattern mayInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + */ +private pattern mustInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + */ +private pattern mayInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEDataType_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + */ +private pattern mustInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + */ +private pattern mayInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfENamedElement_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + */ +private pattern mustInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + */ +private pattern mayInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + */ +private pattern mustInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + */ +private pattern mayInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []containment attribute EReference(source,target) + */ +private pattern mustInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>containment attribute EReference(source,target) + */ +private pattern mayInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []container attribute EReference(source,target) + */ +private pattern mustInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>container attribute EReference(source,target) + */ +private pattern mayInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) + */ +private pattern mustInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + */ +private pattern mayInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + */ +private pattern mustInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + */ +private pattern mayInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + */ +private pattern mustInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + */ +private pattern mayInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + */ +private pattern mustInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + */ +private pattern mayInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + */ +private pattern mustInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + */ +private pattern mayInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or + + { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or + + { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or + + { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustInstanceOfEAttribute_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustInstanceOfEReference_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfETypeParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClass_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAnnotation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAttribute_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClassifier_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEGenericType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEDataType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEOperation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEReference_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnum_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class_by_contents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); + find mustInstanceOfEModelElement_class(problem,interpretation,container); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); + find mustInstanceOfEEnum_class(problem,interpretation,container); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); + find mustInstanceOfEClassifier_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); + find mustInstanceOfETypedElement_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); + find mustInstanceOfETypeParameter_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); +} +pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); +} +pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} +pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_eAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + find mustInstanceOfEDataType_class(problem,interpretation,to); + find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_references_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + find mustInstanceOfEObject_class(problem,interpretation,to); + find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_eSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEOperation_class(problem,interpretation,to); + find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); + find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEGenericType_class(problem,interpretation,to); + find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEOperation_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); +} +pattern refineRelation_eOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_eRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfETypeParameter_class(problem,interpretation,to); + find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_iD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_source_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + StringElement(to); + find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_abstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_interface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_instanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_instanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_serializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEDataType_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_literal_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + StringElement(to); + find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_name_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfENamedElement_class(problem,interpretation,from); + StringElement(to); + find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); +} +pattern refineRelation_nsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_nsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_containment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_container_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_resolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_changeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_volatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_transient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + StringElement(to); + find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_unsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_derived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_ordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_unique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_lowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_upperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_many_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_required_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_key_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "EAttribute class". + */ +private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAttribute class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAttribute class"); +} + +/** + * An element may be an instance of type "EAttribute class". + */ +private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EAnnotation class". + */ +private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAnnotation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAnnotation class"); +} + +/** + * An element may be an instance of type "EAnnotation class". + */ +private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClass class". + */ +private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClass class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClass class"); +} + +/** + * An element may be an instance of type "EClass class". + */ +private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClass_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClassifier class". + */ +private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClassifier class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClassifier class"); +} + +/** + * An element may be an instance of type "EClassifier class". + */ +private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EDataType class". + */ +private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EDataType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EDataType class"); +} + +/** + * An element may be an instance of type "EDataType class". + */ +private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnum class". + */ +private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnum class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnum class"); +} + +/** + * An element may be an instance of type "EEnum class". + */ +private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnumLiteral class". + */ +private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnumLiteral class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnumLiteral class"); +} + +/** + * An element may be an instance of type "EEnumLiteral class". + */ +private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class". + */ +private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class"); +} + +/** + * An element may be an instance of type "EModelElement class". + */ +private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class". + */ +private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class"); +} + +/** + * An element may be an instance of type "ENamedElement class". + */ +private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EObject class". + */ +private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EObject class"); +} + +/** + * An element may be an instance of type "EObject class". + */ +private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EOperation class". + */ +private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EOperation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EOperation class"); +} + +/** + * An element may be an instance of type "EOperation class". + */ +private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class". + */ +private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class"); +} + +/** + * An element may be an instance of type "EPackage class". + */ +private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EParameter class". + */ +private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EParameter class"); +} + +/** + * An element may be an instance of type "EParameter class". + */ +private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EReference class". + */ +private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EReference class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EReference class"); +} + +/** + * An element may be an instance of type "EReference class". + */ +private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEReference_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStructuralFeature class". + */ +private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStructuralFeature class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStructuralFeature class"); +} + +/** + * An element may be an instance of type "EStructuralFeature class". + */ +private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypedElement class". + */ +private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypedElement class"); +} + +/** + * An element may be an instance of type "ETypedElement class". + */ +private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStringToStringMapEntry class". + */ +private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStringToStringMapEntry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStringToStringMapEntry class"); +} + +/** + * An element may be an instance of type "EStringToStringMapEntry class". + */ +private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EGenericType class". + */ +private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EGenericType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EGenericType class"); +} + +/** + * An element may be an instance of type "EGenericType class". + */ +private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypeParameter class". + */ +private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypeParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypeParameter class"); +} + +/** + * An element may be an instance of type "ETypeParameter class". + */ +private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class DefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class DefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class DefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class DefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class DefinedPart". + */ +private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class DefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class DefinedPart". + */ +private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class UndefinedPart". + */ +private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class UndefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class UndefinedPart". + */ +private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + */ +private pattern mustInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + */ +private pattern mayInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + find mayInstanceOfEDataType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + */ +private pattern mustInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + */ +private pattern mayInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + */ +private pattern mustInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + */ +private pattern mayInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEModelElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + */ +private pattern mustInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + */ +private pattern mayInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + */ +private pattern mustInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + */ +private pattern mayInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); +} or { + find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + */ +private pattern mustInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + */ +private pattern mayInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + */ +private pattern mustInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + */ +private pattern mayInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + */ +private pattern mustInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + */ +private pattern mayInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + */ +private pattern mustInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + */ +private pattern mayInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + */ +private pattern mustInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + */ +private pattern mayInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); +} or { + find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); +} or { + find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + */ +private pattern mustInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + */ +private pattern mayInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); +} or { + find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + */ +private pattern mustInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + */ +private pattern mayInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + */ +private pattern mustInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + */ +private pattern mayInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnum_class(problem,interpretation,source); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + */ +private pattern mustInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + */ +private pattern mayInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + find mayInstanceOfEEnum_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + */ +private pattern mustInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + */ +private pattern mayInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEModelElement_class(problem,interpretation,source); + find mayInstanceOfEAnnotation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + */ +private pattern mustInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + */ +private pattern mayInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); +} or { + find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + */ +private pattern mustInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + */ +private pattern mayInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + */ +private pattern mustInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + */ +private pattern mayInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + */ +private pattern mustInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + */ +private pattern mayInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + */ +private pattern mustInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + */ +private pattern mayInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEParameter_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) + */ +private pattern mustInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) + */ +private pattern mayInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + */ +private pattern mustInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + */ +private pattern mayInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + */ +private pattern mustInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + */ +private pattern mayInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + */ +private pattern mustInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + */ +private pattern mayInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + */ +private pattern mustInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + */ +private pattern mayInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + */ +private pattern mustInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + */ +private pattern mayInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + */ +private pattern mustInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + */ +private pattern mayInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + */ +private pattern mustInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + */ +private pattern mayInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + */ +private pattern mustInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + */ +private pattern mayInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + */ +private pattern mustInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + */ +private pattern mayInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypeParameter_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + */ +private pattern mustInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + */ +private pattern mayInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + */ +private pattern mustInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + */ +private pattern mayInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + */ +private pattern mustInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + */ +private pattern mayInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface attribute EClass(source,target) + */ +private pattern mustInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + */ +private pattern mayInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + */ +private pattern mustInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + */ +private pattern mayInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEDataType_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + */ +private pattern mustInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + */ +private pattern mayInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfENamedElement_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + */ +private pattern mustInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + */ +private pattern mayInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + */ +private pattern mustInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + */ +private pattern mayInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []containment attribute EReference(source,target) + */ +private pattern mustInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>containment attribute EReference(source,target) + */ +private pattern mayInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []container attribute EReference(source,target) + */ +private pattern mustInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>container attribute EReference(source,target) + */ +private pattern mayInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) + */ +private pattern mustInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + */ +private pattern mayInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + */ +private pattern mustInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + */ +private pattern mayInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + */ +private pattern mustInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + */ +private pattern mayInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + */ +private pattern mustInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + */ +private pattern mayInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + */ +private pattern mustInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + */ +private pattern mayInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or + + { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or + + { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or + + { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustInstanceOfEAttribute_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustInstanceOfEReference_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEOperation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEGenericType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAttribute_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEDataType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClassifier_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAnnotation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypeParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEReference_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnum_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClass_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); + find mustInstanceOfETypedElement_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); + find mustInstanceOfETypeParameter_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); + find mustInstanceOfEEnum_class(problem,interpretation,container); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); + find mustInstanceOfEClassifier_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); + find mustInstanceOfEModelElement_class(problem,interpretation,container); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class_by_contents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); +} +pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); +} +pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); +} +pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); +} +pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); +} +pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); +} +pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_eAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + find mustInstanceOfEDataType_class(problem,interpretation,to); + find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_references_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + find mustInstanceOfEObject_class(problem,interpretation,to); + find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_eSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEOperation_class(problem,interpretation,to); + find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); + find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEGenericType_class(problem,interpretation,to); + find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEOperation_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); +} +pattern refineRelation_eOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_eRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfETypeParameter_class(problem,interpretation,to); + find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_iD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_source_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + StringElement(to); + find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_abstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_interface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_instanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_instanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_serializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEDataType_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_literal_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + StringElement(to); + find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_name_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfENamedElement_class(problem,interpretation,from); + StringElement(to); + find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); +} +pattern refineRelation_nsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_nsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_containment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_container_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_resolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_changeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_volatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_transient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + StringElement(to); + find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_unsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_derived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_ordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_unique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_lowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_upperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_many_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_required_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_key_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "EAttribute class". + */ +private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAttribute class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAttribute class"); +} + +/** + * An element may be an instance of type "EAttribute class". + */ +private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EAnnotation class". + */ +private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAnnotation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAnnotation class"); +} + +/** + * An element may be an instance of type "EAnnotation class". + */ +private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClass class". + */ +private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClass class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClass class"); +} + +/** + * An element may be an instance of type "EClass class". + */ +private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClass_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClassifier class". + */ +private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClassifier class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClassifier class"); +} + +/** + * An element may be an instance of type "EClassifier class". + */ +private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EDataType class". + */ +private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EDataType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EDataType class"); +} + +/** + * An element may be an instance of type "EDataType class". + */ +private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnum class". + */ +private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnum class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnum class"); +} + +/** + * An element may be an instance of type "EEnum class". + */ +private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnumLiteral class". + */ +private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnumLiteral class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnumLiteral class"); +} + +/** + * An element may be an instance of type "EEnumLiteral class". + */ +private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class". + */ +private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class"); +} + +/** + * An element may be an instance of type "EModelElement class". + */ +private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class". + */ +private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class"); +} + +/** + * An element may be an instance of type "ENamedElement class". + */ +private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EObject class". + */ +private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EObject class"); +} + +/** + * An element may be an instance of type "EObject class". + */ +private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EOperation class". + */ +private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EOperation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EOperation class"); +} + +/** + * An element may be an instance of type "EOperation class". + */ +private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class". + */ +private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class"); +} + +/** + * An element may be an instance of type "EPackage class". + */ +private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EParameter class". + */ +private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EParameter class"); +} + +/** + * An element may be an instance of type "EParameter class". + */ +private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EReference class". + */ +private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EReference class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EReference class"); +} + +/** + * An element may be an instance of type "EReference class". + */ +private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEReference_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStructuralFeature class". + */ +private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStructuralFeature class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStructuralFeature class"); +} + +/** + * An element may be an instance of type "EStructuralFeature class". + */ +private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypedElement class". + */ +private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypedElement class"); +} + +/** + * An element may be an instance of type "ETypedElement class". + */ +private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStringToStringMapEntry class". + */ +private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStringToStringMapEntry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStringToStringMapEntry class"); +} + +/** + * An element may be an instance of type "EStringToStringMapEntry class". + */ +private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EGenericType class". + */ +private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EGenericType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EGenericType class"); +} + +/** + * An element may be an instance of type "EGenericType class". + */ +private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypeParameter class". + */ +private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypeParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypeParameter class"); +} + +/** + * An element may be an instance of type "ETypeParameter class". + */ +private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class DefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class DefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class DefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class DefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class DefinedPart". + */ +private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class DefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class DefinedPart". + */ +private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class UndefinedPart". + */ +private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class UndefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class UndefinedPart". + */ +private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + */ +private pattern mustInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + */ +private pattern mayInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + find mayInstanceOfEDataType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + */ +private pattern mustInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + */ +private pattern mayInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + */ +private pattern mustInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + */ +private pattern mayInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEModelElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + */ +private pattern mustInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + */ +private pattern mayInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + */ +private pattern mustInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + */ +private pattern mayInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); +} or { + find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + */ +private pattern mustInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + */ +private pattern mayInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + */ +private pattern mustInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + */ +private pattern mayInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + */ +private pattern mustInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + */ +private pattern mayInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + */ +private pattern mustInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + */ +private pattern mayInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + */ +private pattern mustInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + */ +private pattern mayInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); +} or { + find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); +} or { + find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + */ +private pattern mustInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + */ +private pattern mayInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); +} or { + find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + */ +private pattern mustInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + */ +private pattern mayInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + */ +private pattern mustInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + */ +private pattern mayInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnum_class(problem,interpretation,source); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + */ +private pattern mustInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + */ +private pattern mayInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + find mayInstanceOfEEnum_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + */ +private pattern mustInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + */ +private pattern mayInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEModelElement_class(problem,interpretation,source); + find mayInstanceOfEAnnotation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + */ +private pattern mustInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + */ +private pattern mayInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); +} or { + find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + */ +private pattern mustInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + */ +private pattern mayInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + */ +private pattern mustInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + */ +private pattern mayInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + */ +private pattern mustInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + */ +private pattern mayInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + */ +private pattern mustInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + */ +private pattern mayInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEParameter_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) + */ +private pattern mustInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) + */ +private pattern mayInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + */ +private pattern mustInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + */ +private pattern mayInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + */ +private pattern mustInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + */ +private pattern mayInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + */ +private pattern mustInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + */ +private pattern mayInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + */ +private pattern mustInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + */ +private pattern mayInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + */ +private pattern mustInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + */ +private pattern mayInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + */ +private pattern mustInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + */ +private pattern mayInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + */ +private pattern mustInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + */ +private pattern mayInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + */ +private pattern mustInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + */ +private pattern mayInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + */ +private pattern mustInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + */ +private pattern mayInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypeParameter_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + */ +private pattern mustInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + */ +private pattern mayInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + */ +private pattern mustInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + */ +private pattern mayInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + */ +private pattern mustInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + */ +private pattern mayInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface attribute EClass(source,target) + */ +private pattern mustInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + */ +private pattern mayInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + */ +private pattern mustInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + */ +private pattern mayInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEDataType_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + */ +private pattern mustInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + */ +private pattern mayInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfENamedElement_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + */ +private pattern mustInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + */ +private pattern mayInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + */ +private pattern mustInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + */ +private pattern mayInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []containment attribute EReference(source,target) + */ +private pattern mustInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>containment attribute EReference(source,target) + */ +private pattern mayInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []container attribute EReference(source,target) + */ +private pattern mustInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>container attribute EReference(source,target) + */ +private pattern mayInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) + */ +private pattern mustInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + */ +private pattern mayInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + */ +private pattern mustInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + */ +private pattern mayInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + */ +private pattern mustInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + */ +private pattern mayInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + */ +private pattern mustInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + */ +private pattern mayInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + */ +private pattern mustInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + */ +private pattern mayInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or + + { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or + + { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or + + { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustInstanceOfEAttribute_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustInstanceOfEReference_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEOperation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEGenericType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAttribute_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEDataType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClassifier_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAnnotation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypeParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEReference_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnum_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClass_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); + find mustInstanceOfEModelElement_class(problem,interpretation,container); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class_by_contents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); + find mustInstanceOfEEnum_class(problem,interpretation,container); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); + find mustInstanceOfETypedElement_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); + find mustInstanceOfETypeParameter_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); + find mustInstanceOfEClassifier_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); +} +pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); +} +pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); +} +pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_eAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + find mustInstanceOfEDataType_class(problem,interpretation,to); + find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_references_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + find mustInstanceOfEObject_class(problem,interpretation,to); + find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_eSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEOperation_class(problem,interpretation,to); + find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); + find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEGenericType_class(problem,interpretation,to); + find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEOperation_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); +} +pattern refineRelation_eOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_eRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfETypeParameter_class(problem,interpretation,to); + find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_iD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_source_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + StringElement(to); + find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_abstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_interface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_instanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_instanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_serializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEDataType_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_literal_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + StringElement(to); + find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_name_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfENamedElement_class(problem,interpretation,from); + StringElement(to); + find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); +} +pattern refineRelation_nsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_nsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_containment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_container_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_resolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_changeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_volatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_transient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + StringElement(to); + find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_unsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_derived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_ordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_unique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_lowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_upperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_many_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_required_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_key_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FunctionalElement class". + */ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); +} + +/** + * An element may be an instance of type "FunctionalElement class". + */ +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Function class". + */ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); +} + +/** + * An element may be an instance of type "Function class". + */ +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FAMTerminator class". + */ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); +} + +/** + * An element may be an instance of type "FAMTerminator class". + */ +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); +} + +/** + * An element may be an instance of type "InformationLink class". + */ +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); +} + +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); +} + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); +} + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + */ +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) + */ +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) + */ +private pattern mustInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) + */ +private pattern mayInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); +} +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); +} +pattern refineRelation_type_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "EAttribute class". + */ +private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAttribute class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAttribute class"); +} + +/** + * An element may be an instance of type "EAttribute class". + */ +private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EAnnotation class". + */ +private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EAnnotation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EAnnotation class"); +} + +/** + * An element may be an instance of type "EAnnotation class". + */ +private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClass class". + */ +private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClass class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClass class"); +} + +/** + * An element may be an instance of type "EClass class". + */ +private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClass_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EClassifier class". + */ +private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EClassifier class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EClassifier class"); +} + +/** + * An element may be an instance of type "EClassifier class". + */ +private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EDataType class". + */ +private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EDataType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EDataType class"); +} + +/** + * An element may be an instance of type "EDataType class". + */ +private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnum class". + */ +private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnum class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnum class"); +} + +/** + * An element may be an instance of type "EEnum class". + */ +private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EEnumLiteral class". + */ +private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EEnumLiteral class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EEnumLiteral class"); +} + +/** + * An element may be an instance of type "EEnumLiteral class". + */ +private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class". + */ +private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class"); +} + +/** + * An element may be an instance of type "EModelElement class". + */ +private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class". + */ +private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class"); +} + +/** + * An element may be an instance of type "ENamedElement class". + */ +private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EObject class". + */ +private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EObject class"); +} + +/** + * An element may be an instance of type "EObject class". + */ +private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EOperation class". + */ +private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EOperation class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EOperation class"); +} + +/** + * An element may be an instance of type "EOperation class". + */ +private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewEOperation_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class". + */ +private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class"); +} + +/** + * An element may be an instance of type "EPackage class". + */ +private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EParameter class". + */ +private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EParameter class"); +} + +/** + * An element may be an instance of type "EParameter class". + */ +private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewEParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EReference class". + */ +private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EReference class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EReference class"); +} + +/** + * An element may be an instance of type "EReference class". + */ +private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEReference_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEReference_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStructuralFeature class". + */ +private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStructuralFeature class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStructuralFeature class"); +} + +/** + * An element may be an instance of type "EStructuralFeature class". + */ +private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypedElement class". + */ +private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypedElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypedElement class"); +} + +/** + * An element may be an instance of type "ETypedElement class". + */ +private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find scopeDisallowsNewETypedElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EStringToStringMapEntry class". + */ +private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EStringToStringMapEntry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EStringToStringMapEntry class"); +} + +/** + * An element may be an instance of type "EStringToStringMapEntry class". + */ +private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EGenericType class". + */ +private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EGenericType class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EGenericType class"); +} + +/** + * An element may be an instance of type "EGenericType class". + */ +private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEGenericType_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } +/** + * An element must be an instance of type "ETypeParameter class". + */ +private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ETypeParameter class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ETypeParameter class"); +} + +/** + * An element may be an instance of type "ETypeParameter class". + */ +private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class DefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class DefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class DefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EModelElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EModelElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "EModelElement class UndefinedPart". + */ +private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class DefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class DefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"ENamedElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"ENamedElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "ENamedElement class UndefinedPart". + */ +private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class DefinedPart". + */ +private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class DefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class DefinedPart". + */ +private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "EPackage class UndefinedPart". + */ +private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"EPackage class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"EPackage class UndefinedPart"); +} + +/** + * An element may be an instance of type "EPackage class UndefinedPart". + */ +private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + */ +private pattern mustInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + */ +private pattern mayInRelationeAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + find mayInstanceOfEDataType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + */ +private pattern mustInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + */ +private pattern mayInRelationdetails_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + */ +private pattern mustInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + */ +private pattern mayInRelationeModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEModelElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + */ +private pattern mustInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + */ +private pattern mayInRelationcontents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + */ +private pattern mustInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + */ +private pattern mayInRelationreferences_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + find mayInstanceOfEObject_class(problem,interpretation,target); +} or { + find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + */ +private pattern mustInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + */ +private pattern mayInRelationeOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + */ +private pattern mustInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + */ +private pattern mayInRelationeAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + */ +private pattern mustInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + */ +private pattern mayInRelationeReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + */ +private pattern mustInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + */ +private pattern mayInRelationeAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + */ +private pattern mustInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + */ +private pattern mayInRelationeAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); +} or { + find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + */ +private pattern mustInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + */ +private pattern mayInRelationeAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); +} or { + find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); +} or { + find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); +} or { + find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + */ +private pattern mustInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + */ +private pattern mayInRelationeIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + */ +private pattern mustInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + */ +private pattern mayInRelationeStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + */ +private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); +} or { + find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + */ +private pattern mustInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + */ +private pattern mayInRelationePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + */ +private pattern mustInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + */ +private pattern mayInRelationeLiterals_reference_EEnum( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnum_class(problem,interpretation,source); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + */ +private pattern mustInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + */ +private pattern mayInRelationeEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + find mayInstanceOfEEnum_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + */ +private pattern mustInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + */ +private pattern mayInRelationeAnnotations_reference_EModelElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEModelElement_class(problem,interpretation,source); + find mayInstanceOfEAnnotation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + */ +private pattern mustInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + */ +private pattern mayInRelationeTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + */ +private pattern mustInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + */ +private pattern mayInRelationeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); +} or { + find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + */ +private pattern mustInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + */ +private pattern mayInRelationeGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEOperation_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + */ +private pattern mustInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + */ +private pattern mayInRelationeClassifiers_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + */ +private pattern mustInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + */ +private pattern mayInRelationeSubpackages_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + */ +private pattern mustInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + */ +private pattern mayInRelationeSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + find mayInstanceOfEPackage_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + */ +private pattern mustInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + */ +private pattern mayInRelationeOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEParameter_class(problem,interpretation,source); + find mayInstanceOfEOperation_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) + */ +private pattern mustInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) + */ +private pattern mayInRelationeOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEReference_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + */ +private pattern mustInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + */ +private pattern mayInRelationeReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + */ +private pattern mustInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + */ +private pattern mayInRelationeKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + find mayInstanceOfEAttribute_class(problem,interpretation,target); +} or { + find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mustInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + */ +private pattern mayInRelationeContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + find mayInstanceOfEClass_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + */ +private pattern mustInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + */ +private pattern mayInRelationeType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + */ +private pattern mustInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + */ +private pattern mayInRelationeGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + */ +private pattern mustInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + */ +private pattern mayInRelationeUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + */ +private pattern mustInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + */ +private pattern mayInRelationeRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + */ +private pattern mustInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + */ +private pattern mayInRelationeLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + */ +private pattern mustInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + */ +private pattern mayInRelationeTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfETypeParameter_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + */ +private pattern mustInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + */ +private pattern mayInRelationeClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEGenericType_class(problem,interpretation,source); + find mayInstanceOfEClassifier_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + */ +private pattern mustInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + */ +private pattern mayInRelationeBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypeParameter_class(problem,interpretation,source); + find mayInstanceOfEGenericType_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + */ +private pattern mustInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + */ +private pattern mayInRelationiD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAttribute_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + */ +private pattern mustInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + */ +private pattern mayInRelationsource_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEAnnotation_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + */ +private pattern mustInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + */ +private pattern mayInRelationabstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []interface attribute EClass(source,target) + */ +private pattern mustInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + */ +private pattern mayInRelationinterface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClass_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + */ +private pattern mustInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + */ +private pattern mayInRelationinstanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEClassifier_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + */ +private pattern mustInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + */ +private pattern mayInRelationserializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEDataType_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationvalue_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) + */ +private pattern mustInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) + */ +private pattern mayInRelationliteral_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + */ +private pattern mustInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + */ +private pattern mayInRelationname_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfENamedElement_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + */ +private pattern mustInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + */ +private pattern mayInRelationnsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + */ +private pattern mustInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + */ +private pattern mayInRelationnsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEPackage_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []containment attribute EReference(source,target) + */ +private pattern mustInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>containment attribute EReference(source,target) + */ +private pattern mayInRelationcontainment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []container attribute EReference(source,target) + */ +private pattern mustInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>container attribute EReference(source,target) + */ +private pattern mayInRelationcontainer_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) + */ +private pattern mustInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + */ +private pattern mayInRelationresolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEReference_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationchangeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationvolatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationtransient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationunsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + */ +private pattern mustInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + */ +private pattern mayInRelationderived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + */ +private pattern mustInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + */ +private pattern mayInRelationordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + */ +private pattern mustInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + */ +private pattern mayInRelationunique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationlowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + */ +private pattern mustInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + */ +private pattern mayInRelationupperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + IntegerElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + */ +private pattern mustInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + */ +private pattern mayInRelationmany_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + */ +private pattern mustInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + */ +private pattern mayInRelationrequired_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfETypedElement_class(problem,interpretation,source); + BooleanElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationkey_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + */ +private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + */ +private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); + StringElement(target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or + + { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or + + { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or + + { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or + + { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or + + { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or + + { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or + + { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or + + { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustInstanceOfEAttribute_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustInstanceOfEReference_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEOperation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEGenericType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAttribute_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEDataType_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClassifier_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEAnnotation_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypeParameter_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEReference_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEEnum_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfETypedElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEClass_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EStringToStringMapEntry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnum_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); + find mayInstanceOfEEnum_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + find mayInstanceOfEParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); + find mustInstanceOfETypedElement_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); + find mustInstanceOfEGenericType_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); + find mustInstanceOfETypeParameter_class(problem,interpretation,container); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EGenericType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EPackage_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class_by_contents_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); + find mustInstanceOfEAnnotation_class(problem,interpretation,container); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EObject_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); + find mayInstanceOfEObject_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); + find mustInstanceOfEEnum_class(problem,interpretation,container); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EEnumLiteral_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); + find mustInstanceOfEClassifier_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); + find mustInstanceOfEOperation_class(problem,interpretation,container); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_ETypeParameter_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); + find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAttribute_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EOperation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); + find mayInstanceOfEOperation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); + find mustInstanceOfEModelElement_class(problem,interpretation,container); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EAnnotation_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); + find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); + find mustInstanceOfEClass_class(problem,interpretation,container); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EReference_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); + find mayInstanceOfEReference_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EDataType_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + find mayInstanceOfEDataType_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); + find mustInstanceOfEPackage_class(problem,interpretation,container); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_EClass_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); + find mayInstanceOfEClass_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); +} +pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); +} +pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); +} +pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEModelElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); +} +pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); +} +pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); +} +pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); +} +pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfENamedElement_class(problem,interpretation,element); +} +pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEParameter_class(problem,interpretation,element); + neg find mustInstanceOfEReference_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfEClassifier_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); + neg find mustInstanceOfEOperation_class(problem,interpretation,element); + neg find mustInstanceOfEAttribute_class(problem,interpretation,element); +} +pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEEnum_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); +} +pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); + neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); + neg find mustInstanceOfEGenericType_class(problem,interpretation,element); + neg find mustInstanceOfEObject_class(problem,interpretation,element); + neg find mustInstanceOfEDataType_class(problem,interpretation,element); + neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); + neg find mustInstanceOfETypedElement_class(problem,interpretation,element); + neg find mustInstanceOfEClass_class(problem,interpretation,element); + neg find mustInstanceOfEPackage_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_eAttributeType_reference_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + find mustInstanceOfEDataType_class(problem,interpretation,to); + find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_references_reference_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + find mustInstanceOfEObject_class(problem,interpretation,to); + find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_eSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eReferences_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAttributes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllContainments_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllOperations_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEOperation_class(problem,interpretation,to); + find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllStructuralFeatures_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); + find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eIDAttribute_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eAllGenericSuperTypes_reference_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + find mustInstanceOfEGenericType_class(problem,interpretation,to); + find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); +} +pattern refineRelation_eExceptions_reference_EOperation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEOperation_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); +} +pattern refineRelation_eOpposite_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEReference_class(problem,interpretation,to); + find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eReferenceType_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEClass_class(problem,interpretation,to); + find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eKeys_reference_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + find mustInstanceOfEAttribute_class(problem,interpretation,to); + find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); +} +pattern refineRelation_eType_reference_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_eRawType_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eTypeParameter_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfETypeParameter_class(problem,interpretation,to); + find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_eClassifier_reference_EGenericType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEGenericType_class(problem,interpretation,from); + find mustInstanceOfEClassifier_class(problem,interpretation,to); + find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); +} +pattern refineRelation_iD_attribute_EAttribute( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAttribute_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); +} +pattern refineRelation_source_attribute_EAnnotation( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEAnnotation_class(problem,interpretation,from); + StringElement(to); + find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); +} +pattern refineRelation_abstract_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_interface_attribute_EClass( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClass_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); + neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); +} +pattern refineRelation_instanceClassName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_instanceTypeName_attribute_EClassifier( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEClassifier_class(problem,interpretation,from); + StringElement(to); + find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); +} +pattern refineRelation_serializable_attribute_EDataType( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEDataType_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_literal_attribute_EEnumLiteral( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); + StringElement(to); + find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); +} +pattern refineRelation_name_attribute_ENamedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfENamedElement_class(problem,interpretation,from); + StringElement(to); + find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); +} +pattern refineRelation_nsURI_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_nsPrefix_attribute_EPackage( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEPackage_class(problem,interpretation,from); + StringElement(to); + find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); +} +pattern refineRelation_containment_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_container_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_resolveProxies_attribute_EReference( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEReference_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); +} +pattern refineRelation_changeable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_volatile_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_transient_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + StringElement(to); + find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_unsettable_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_derived_attribute_EStructuralFeature( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); +} +pattern refineRelation_ordered_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_unique_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_lowerBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_upperBound_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + IntegerElement(to); + find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_many_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_required_attribute_ETypedElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfETypedElement_class(problem,interpretation,from); + BooleanElement(to); + find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); +} +pattern refineRelation_key_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} +pattern refineRelation_value_attribute_EStringToStringMapEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); + StringElement(to); + find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); +} 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 @@ - + 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 @@ +one sig util'language { + 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))))))))), + 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)))))))))) +} +abstract sig util'Object { +} +sig type'FunctionalElement'class in util'Object { + interface'reference'FunctionalElement : lone type'FunctionalInterface'class, + parent'reference'FunctionalElement : lone type'Function'class +} +sig type'FunctionalArchitectureModel'class in util'Object { + rootElements'reference'FunctionalArchitectureModel : set type'FunctionalElement'class +} +sig type'Function'class in type'FunctionalElement'class { + subElements'reference'Function : set type'FunctionalElement'class +} +sig type'FAMTerminator'class in util'Object { + data'reference'FAMTerminator : lone type'FunctionalData'class +} +sig type'InformationLink'class in util'Object { + from'reference'InformationLink : lone type'FunctionalOutput'class, + to'reference'InformationLink : one type'FunctionalInput'class +} +sig type'FunctionalInterface'class in util'Object { + data'reference'FunctionalInterface : set type'FunctionalData'class, + element'reference'FunctionalInterface : lone type'FunctionalElement'class +} +sig type'FunctionalInput'class in type'FunctionalData'class { + IncomingLinks'reference'FunctionalInput : set type'InformationLink'class +} +sig type'FunctionalOutput'class in type'FunctionalData'class { + outgoingLinks'reference'FunctionalOutput : set type'InformationLink'class +} +sig type'FunctionalData'class in util'Object { + terminator'reference'FunctionalData : lone type'FAMTerminator'class, + interface'reference'FunctionalData : lone type'FunctionalInterface'class +} +sig type'FunctionType'enum in util'Object { +} +sig type'FunctionalArchitectureModel'class'DefinedPart in type'FunctionalArchitectureModel'class { +} +sig type'FunctionalArchitectureModel'class'UndefinedPart in type'FunctionalArchitectureModel'class { +} +one sig element'o'1 in type'FunctionalArchitectureModel'class'DefinedPart { +} +one sig element'Root'literal'FunctionType, +element'Intermediate'literal'FunctionType, +element'Leaf'literal'FunctionType in type'FunctionType'enum { +} +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [parameter'T: type'FAMTerminator'class, parameter'I: type'InformationLink'class] { + (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) }) +} +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [parameter'This: type'Function'class, parameter'Target: type'FunctionType'enum] { + (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) })) +} +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'rootElements [parameter'Model: type'FunctionalArchitectureModel'class, parameter'Root: type'Function'class] { + parameter'Root in type'Function'class && parameter'Root in parameter'Model.rootElements'reference'FunctionalArchitectureModel +} +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'parent [parameter'Func: type'Function'class, parameter'Par: type'Function'class] { + parameter'Func in type'Function'class && (parameter'Par in parameter'Func.parent'reference'FunctionalElement && parameter'Par in type'Function'class) +} +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [parameter'This: type'FunctionalElement'class, parameter'Target: type'FunctionalArchitectureModel'class] { + parameter'This in type'FunctionalElement'class && parameter'Target in type'FunctionalArchitectureModel'class +} +fact typedefinition'FunctionType'enum { + type'FunctionType'enum = element'Root'literal'FunctionType + (element'Intermediate'literal'FunctionType + element'Leaf'literal'FunctionType) +} +fact typedefinition'FunctionalArchitectureModel'class'DefinedPart { + type'FunctionalArchitectureModel'class'DefinedPart = element'o'1 +} +fact typeElementsUnique'FunctionType'enum { + 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)))) +} +fact typeElementsUnique'FunctionalArchitectureModel'class'DefinedPart { + 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)))) +} +fact abstract'FunctionalElement'class { + type'FunctionalElement'class = type'Function'class +} +fact abstract'FunctionalArchitectureModel'class { + type'FunctionalArchitectureModel'class = type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart +} +fact abstract'FunctionalData'class { + type'FunctionalData'class = type'FunctionalInput'class + type'FunctionalOutput'class +} +fact ObjectTypeDefinition { + util'Object = type'FunctionalElement'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalData'class + type'FunctionType'enum))))) +} +fact common'types'FunctionalArchitectureModel'class'FunctionalElement'class { + type'FunctionalArchitectureModel'class & type'FunctionalElement'class = none +} +fact common'types'FAMTerminator'class'FunctionalElement'class { + type'FAMTerminator'class & type'FunctionalElement'class = none +} +fact common'types'FAMTerminator'class'FunctionalArchitectureModel'class { + type'FAMTerminator'class & type'FunctionalArchitectureModel'class = none +} +fact common'types'InformationLink'class'FunctionalElement'class { + type'InformationLink'class & type'FunctionalElement'class = none +} +fact common'types'InformationLink'class'FunctionalArchitectureModel'class { + type'InformationLink'class & type'FunctionalArchitectureModel'class = none +} +fact common'types'InformationLink'class'FAMTerminator'class { + type'InformationLink'class & type'FAMTerminator'class = none +} +fact common'types'FunctionalInterface'class'FunctionalElement'class { + type'FunctionalInterface'class & type'FunctionalElement'class = none +} +fact common'types'FunctionalInterface'class'FunctionalArchitectureModel'class { + type'FunctionalInterface'class & type'FunctionalArchitectureModel'class = none +} +fact common'types'FunctionalInterface'class'FAMTerminator'class { + type'FunctionalInterface'class & type'FAMTerminator'class = none +} +fact common'types'FunctionalInterface'class'InformationLink'class { + type'FunctionalInterface'class & type'InformationLink'class = none +} +fact common'types'FunctionalData'class'FunctionalElement'class { + type'FunctionalData'class & type'FunctionalElement'class = none +} +fact common'types'FunctionalData'class'FunctionalArchitectureModel'class { + type'FunctionalData'class & type'FunctionalArchitectureModel'class = none +} +fact common'types'FunctionalData'class'FAMTerminator'class { + type'FunctionalData'class & type'FAMTerminator'class = none +} +fact common'types'FunctionalData'class'InformationLink'class { + type'FunctionalData'class & type'InformationLink'class = none +} +fact common'types'FunctionalData'class'FunctionalInterface'class { + type'FunctionalData'class & type'FunctionalInterface'class = none +} +fact common'types'FunctionType'enum'FunctionalElement'class { + type'FunctionType'enum & type'FunctionalElement'class = none +} +fact common'types'FunctionType'enum'FunctionalArchitectureModel'class { + type'FunctionType'enum & type'FunctionalArchitectureModel'class = none +} +fact common'types'FunctionType'enum'FAMTerminator'class { + type'FunctionType'enum & type'FAMTerminator'class = none +} +fact common'types'FunctionType'enum'InformationLink'class { + type'FunctionType'enum & type'InformationLink'class = none +} +fact common'types'FunctionType'enum'FunctionalInterface'class { + type'FunctionType'enum & type'FunctionalInterface'class = none +} +fact common'types'FunctionType'enum'FunctionalData'class { + type'FunctionType'enum & type'FunctionalData'class = none +} +fact common'types'FunctionalArchitectureModel'class'UndefinedPart'FunctionalArchitectureModel'class'DefinedPart { + type'FunctionalArchitectureModel'class'UndefinedPart & type'FunctionalArchitectureModel'class'DefinedPart = none +} +fact common'types'FunctionalOutput'class'FunctionalInput'class { + type'FunctionalOutput'class & type'FunctionalInput'class = none +} +fact util'containmentDefinition { + util'language.util'contains = interface'reference'FunctionalElement + (rootElements'reference'FunctionalArchitectureModel + (subElements'reference'Function + (data'reference'FunctionalInterface + (outgoingLinks'reference'FunctionalOutput + terminator'reference'FunctionalData)))) +} +fact util'noParentForRoot { + 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 } +} +fact util'atLeastOneParent { + 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 }) } +} +fact util'noCircularContainment { + 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) } +} +fact lowerMultiplicity'model'FunctionalElement { + all src: type'FunctionalElement'class { some trg'1: type'FunctionalArchitectureModel'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [ src , trg'1 ] } } +} +fact upperMultiplicity'model'FunctionalElement { + 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) } +} +fact oppositeReference'interface'FunctionalElement { + interface'reference'FunctionalElement = ~ element'reference'FunctionalInterface +} +fact oppositeReference'parent'FunctionalElement { + parent'reference'FunctionalElement = ~ subElements'reference'Function +} +fact oppositeReference'data'FAMTerminator { + data'reference'FAMTerminator = ~ terminator'reference'FunctionalData +} +fact oppositeReference'from'InformationLink { + from'reference'InformationLink = ~ outgoingLinks'reference'FunctionalOutput +} +fact oppositeReference'to'InformationLink { + to'reference'InformationLink = ~ IncomingLinks'reference'FunctionalInput +} +fact oppositeReference'data'FunctionalInterface { + data'reference'FunctionalInterface = ~ interface'reference'FunctionalData +} +fact lowerMultiplicity'type'Function { + all src: type'Function'class { some trg'1: type'FunctionType'enum { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [ src , trg'1 ] } } +} +fact upperMultiplicity'type'Function { + 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) } +} +fact errorpattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation { + all p0: type'FAMTerminator'class, p1: type'InformationLink'class { ! (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [ p0 , p1 ]) } +} +run { } 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EEnumLiteral class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eLiterals reference EEnum" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eEnum reference EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "literal attribute EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 12 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "abstract attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EOperation class + ETypedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 238.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EStringToStringMapEntry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "details reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eOperations reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eAllSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eContainingClass reference EOperation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "unique attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "upperBound attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png 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 @@ - - - - - - + +
+ + + + + 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EEnumLiteral class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eLiterals reference EEnum" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eEnum reference EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "literal attribute EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 12 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "abstract attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 361.90000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class DefinedPart + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 3 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EOperation class + ETypedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 238.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EStringToStringMapEntry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "details reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eOperations reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eAllSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eContainingClass reference EOperation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "unique attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "upperBound attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png 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 @@ - - - - - - + +
+ + + + + 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EEnumLiteral class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eLiterals reference EEnum" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eEnum reference EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "literal attribute EEnumLiteral" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 124 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EEnum class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + ETypeParameter class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eTypeParameters reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 12 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "abstract attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EPackage class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + EPackage class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class + ENamedElement class + EOperation class + ETypedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 238.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EStringToStringMapEntry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 14 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "details reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eOperations reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eAllSuperTypes reference EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eContainingClass reference EOperation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eSubpackages reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eSuperPackage reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 1 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "unique attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "upperBound attribute ETypedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png 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 @@ - - - - - - + +
+ + + + + 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png 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 @@ - - - - - - + + + + + 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 254.10000000000002 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EModelElement class DefinedPart + ENamedElement class DefinedPart + EPackage class DefinedPart + EModelElement class + ENamedElement class + EPackage class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 24.200000000000003 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "-1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "0" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 15.400000000000002 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""A"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 33.0 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""B"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 94.60000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsPrefix"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 68.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""nsUri"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 121.00000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text ""packageName"" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClass class + EClassifier class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 269.5 + h 110 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EClassifier class + EDataType class + EModelElement class + ENamedElement class + EModelElement class UndefinedPart + ENamedElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 269.5 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + EAnnotation class + EModelElement class + EModelElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 12 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "eModelElement reference EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "ePackage reference EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eAnnotations reference EModelElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "eClassifiers reference EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source attribute EAnnotation" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "abstract attribute EClass" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceClassName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "instanceTypeName attribute EClassifier" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "serializable attribute EDataType" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "name attribute ENamedElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsURI attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "nsPrefix attribute EPackage" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png 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 @@ - - - - - - + + + + + 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 1;1;ModelResultImpl;443;2849;2573;4906642931;151;171;75;124;7;0;8 Task;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 2;1;ModelResultImpl;19;4315;9042;20459725100;239;247;252;257;261;217;19;6;0;11 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;513;2237;2193;6152392500;162;177;77;150;6;0;5 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;11;1602;1604;2992330200;66;77;38;16;1;0;3 +Task;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 +2;1;ModelResultImpl;128;4855;10109;16068923000;382;391;398;403;409;349;37;8;0;16 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +2;1;ModelResultImpl;18;3632;9743;7955260600;299;307;313;261;17;7;0;8 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +2;1;ModelResultImpl;471;5606;10554;10190416000;482;497;509;400;189;16;0;21 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +2;1;ModelResultImpl;28;4850;10801;9664839300;622;635;651;560;23;18;0;20 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;6;1884;1462;3186743800;40;48;20;16;1;0;1 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +2;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 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204) + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282) + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1) + org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66) + org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.(FileSystemImpl.java:55) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204) + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282) + org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1) + org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66) + org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.(FileSystemImpl.java:55) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74) + ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108) + org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41) + com.google.common.collect.Iterators$6.computeNext(Iterators.java:617) + com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145) + com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140) + com.google.common.collect.Iterators.addAll(Iterators.java:366) + com.google.common.collect.Iterables.addAll(Iterables.java:332) + com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383) + org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 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 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); } +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ +private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>live reference FileSystem(source,target) + */ +private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); +} or { + find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ +private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>live reference FileSystem(source,target) + */ +private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); +} or { + find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( + problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFSObject_class(problem,interpretation,var_o1); + find mayInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mayInstanceOfDir_class(problem,interpretation,var_o1); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_o2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_l); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_root); + find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); +} +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); +} +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFSObject_class(problem,interpretation,var_o1); + find mayInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mayInstanceOfDir_class(problem,interpretation,var_o1); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_o2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_l); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_root); + find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); +} +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFSObject_class(problem,interpretation,var_o1); + find mayInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mayInstanceOfDir_class(problem,interpretation,var_o1); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_o2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_l); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_root); + find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); +} +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "FileSystem class". + */ +private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FileSystem class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FileSystem class"); +} + +/** + * An element may be an instance of type "FileSystem class". + */ +private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FSObject class". + */ +private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FSObject class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FSObject class"); +} + +/** + * An element may be an instance of type "FSObject class". + */ +private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFSObject_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFSObject_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Dir class". + */ +private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Dir class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Dir class"); +} + +/** + * An element may be an instance of type "Dir class". + */ +private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewDir_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfDir_class(problem,interpretation,element); } +/** + * An element must be an instance of type "File class". + */ +private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"File class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"File class"); +} + +/** + * An element may be an instance of type "File class". + */ +private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFile_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFile_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class". + */ +private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class"); +} + +/** + * An element may be an instance of type "Model class". + */ +private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class DefinedPart". + */ +private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class DefinedPart"); +} + +/** + * An element may be an instance of type "Model class DefinedPart". + */ +private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Model class UndefinedPart". + */ +private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Model class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Model class UndefinedPart"); +} + +/** + * An element may be an instance of type "Model class UndefinedPart". + */ +private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); + neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []root reference FileSystem(source,target) + */ +private pattern mustInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>root reference FileSystem(source,target) + */ +private pattern mayInRelationroot_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFileSystem_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mustInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []live reference FileSystem(source,target) + */ + private pattern mayInRelationlive_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) + { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); + } +/** + * Matcher for detecting tuples t where []parent reference FSObject(source,target) + */ +private pattern mustInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>parent reference FSObject(source,target) + */ +private pattern mayInRelationparent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFSObject_class(problem,interpretation,source); + find mayInstanceOfDir_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []contents reference Dir(source,target) + */ +private pattern mustInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>contents reference Dir(source,target) + */ +private pattern mayInRelationcontents_reference_Dir( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfDir_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []filesystems reference Model(source,target) + */ +private pattern mustInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>filesystems reference Model(source,target) + */ +private pattern mayInRelationfilesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFileSystem_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) + */ +private pattern mustInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) + */ +private pattern mayInRelationotherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfModel_class(problem,interpretation,source); + find mayInstanceOfFSObject_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFSObject_class(problem,interpretation,var_o1); + find mayInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mayInstanceOfDir_class(problem,interpretation,var_o1); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_o2); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( + problem:LogicProblem, interpretation:PartialInterpretation, + var_o1, var_o2) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,var_o1); + find mustInstanceOfFSObject_class(problem,interpretation,var_o2); + // o1 is exported + // o2 is exported + find mustInstanceOfDir_class(problem,interpretation,var_o1); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_o2; +} +private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_l); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mayInstanceOfFileSystem_class(problem,interpretation,var_this); + find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mayInstanceOfDir_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_root); + find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( + problem:LogicProblem, interpretation:PartialInterpretation, + var_this, var_l) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_l; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInstanceOfFSObject_class(problem,interpretation,var_l); + // this is exported + // l is exported + find mustInstanceOfFileSystem_class(problem,interpretation,var_this); + find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); + find mustInstanceOfDir_class(problem,interpretation,var_virtual0); + var_virtual0 == var_root; + find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfDir_class(problem,interpretation,var_parent); + find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_child); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInstanceOfFSObject_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfDir_class(problem,interpretation,var_parent); + find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); + var_virtual0 == var_child; + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); +} + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or + + { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + + { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + + { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFile_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfDir_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Dir_class_by_root_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); + find mustInstanceOfFileSystem_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Dir_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + find mayInstanceOfDir_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class_by_filesystems_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FileSystem_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Model_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); + find mustInstanceOfDir_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class_by_otherFSObjects_reference_Model( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); + find mustInstanceOfModel_class(problem,interpretation,container); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_File_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + find mayInstanceOfFile_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} +pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); +} +pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFSObject_class(problem,interpretation,element); +} +pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfDir_class(problem,interpretation,element); + neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + neg find mustInstanceOfFile_class(problem,interpretation,element); + neg find mustInstanceOfModel_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_live_reference_FileSystem( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFileSystem_class(problem,interpretation,from); + find mustInstanceOfFSObject_class(problem,interpretation,to); + find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); + neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); +} 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 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + - + - + - + @@ -35,24 +25,24 @@ - + - + - + - + - + - + @@ -66,24 +56,24 @@ - + - + - + - + - + - + @@ -97,75 +87,220 @@ - + - + - - + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + - - - + + + + + - + - + - - - + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + - - + - + - + - - + + + + + + - - + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + 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 @@ - + - + - + - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - @@ -94,13 +66,4 @@ - - - - - - - - - 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "parent reference FSObject" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "contents reference Dir" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png 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 @@ - - - - - - - - + + + + + + + + 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 ] ] ] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Model class DefinedPart + Model class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FileSystem class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + Dir class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 123.20000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FSObject class + File class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "root reference FileSystem" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "filesystems reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "otherFSObjects reference Model" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] 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 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png 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 @@ - - - - - - - - + + + + + + + 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 @@ Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime 1;1;ModelResultImpl;335;2777;2544;7194393100;105;140;61;186;9;0;3 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;120;2483;7934;1838851300;477;3162;36;100;0;2 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;InconsistencyResultImpl;20;2258;2771;12900;42;12;1;0;0 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;InconsistencyResultImpl;14;2066;3146;29000;439;14;13;0;0 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;15;1857;2520;3998461000;169;207;102;9;4;0;3 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;70;2695;2815;3409332300;111;133;61;18;3;0;5 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;16;2246;2987;3347793300;168;362;201;7;6;0;3 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;6;839;711;3017372100;45;206;107;9;7;0;1 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;5;879;674;2970538700;33;111;55;7;2;0;1 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;ModelResultImpl;5;882;742;2902370500;64;203;110;9;6;0;1 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;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 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql new file mode 100644 index 00000000..9af35b50 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql @@ -0,0 +1,29 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries + +import epackage "http://www.eclipse.org/emf/2002/Ecore" + +pattern directSupertype(a: EClass, b:EClass) { + EClass.eSuperTypes(a,b); +} + +@Constraint(key={a}, severity="error", message="error") +pattern loopInInheritence(a: EClass) { + find directSupertype+(a,a); +} + +pattern opposite(a:EReference, b: EReference) { + EReference.eOpposite(a,b); +} +@Constraint(key={a}, severity="error", message="error") +pattern oppositeDifferentClass(a:EReference) { + EReference.eOpposite(a,b); + EReference.eContainingClass(a,aContaining); + EReference.eType(b,bTarget); + aContaining != bTarget; +} + +@Constraint(key={a}, severity="error", message="error") +pattern nonSymmetricOpposite(a:EReference, b:EReference) { + find opposite(a,b); + neg find opposite(b,a); +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 new file mode 100644 index 00000000..02d34dcd --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql @@ -0,0 +1,103 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries + +import "FamMetamodel" + +@Constraint(message="terminatorAndInformation", severity="error", key={T}) +pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { + FunctionalOutput.outgoingLinks(Out,I); + FunctionalOutput.terminator(Out,T); +} or { + InformationLink.to(I,In); + FunctionalInput.terminator(In,T); +} + +@QueryBasedFeature +pattern type(This : Function, Target : FunctionType) = { + find rootElements(_Model, This); + Target == FunctionType::Root; +} or { + neg find parent(_Child, This); + neg find rootElements(_Model, This); + Target == FunctionType::Leaf; +} or { + find parent(This, _Par); + find parent(_Child, This); + Target == FunctionType::Intermediate; +} + +pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = { + FunctionalArchitectureModel.rootElements(Model, Root); +} + +pattern parent(Func : Function, Par : Function) = { + Function.parent(Func, Par); +} + +@QueryBasedFeature +pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) { + FunctionalElement(This); + FunctionalArchitectureModel(Target); +} + +/* +@Constraint(message="noRoot", severity="error", key={fam}) +pattern noRoot(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasRoot(_); +} +@Constraint(message="noIntermediate", severity="error", key={fam}) +pattern noInt(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasInt(_); +} +@Constraint(message="noLeaf", severity="error", key={fam}) +pattern noLeaf(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasLeaf(_); +} +*/ + +/* +@QueryBasedFeature +pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = { + find parent+(This, Parent); + find rootElements(Target, Parent); +} or { + find rootElements(Target, This); +} + +pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = { + FunctionalInterface.data(FI, FD); +} + +@QueryBasedFeature +pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.outputs(This, Output); + InformationLink.from(Target, Output); +} + +@QueryBasedFeature +pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.inputs(This, Input); + InformationLink.to(Target, Input); +} + +@QueryBasedFeature +pattern connects(This : FunctionalElement, Target : FunctionalElement) = { + FunctionalElement.outgoingLinks(This,Link); + FunctionalElement.incomingLinks(Target,Link); +}*/ + +/*pattern frequency(a: Function, b : EInt) { + Function.minimumFrequency(a,b); +}*/ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql new file mode 100644 index 00000000..269a4242 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql @@ -0,0 +1,24 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries + +import epackage "FileSystemMetamodel" + +pattern patternContent(o1: FSObject, o2: FSObject) { + Dir.contents(o1,o2); +} + +@QueryBasedFeature +pattern live(this: FileSystem, l: FSObject) { + FileSystem.root(this,l); +} or { + FileSystem.root(this,root); + find patternContent+(root,l); +} + +@Constraint(key={child}, severity="error", message="error") +pattern contentInNotLive(parent : Dir, child: FSObject) { + Dir.contents(parent,child); + neg find live(_,parent); +} or { + Dir.contents(parent,child); + neg find live(_,child); +} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 new file mode 100644 index 00000000..2e498670 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql @@ -0,0 +1,270 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries + +import epackage "YakinduMetamodel" + +///////// +// Entry +///////// + +pattern entryInRegion_M0(r1 : Region, e1 : Entry) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M1(r1 : Region, e1) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M2(r1 : Region, e1: Entry) { + // For positive constraint + Region(r1);Entry(e1); +} + + +//@Constraint(severity="error", message="error", key = {r1}) +pattern noEntryInRegion_M0(r1 : Region) { + neg find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M1(r1 : Region) { + neg find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M2(r1 : Region) { + neg find entryInRegion_M2(r1, _); +} +pattern noEntryInRegion_M3(r1 : Region) { + find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M4(r1 : Region) { + find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M5(r1 : Region) { + find entryInRegion_M2(r1, _); +} + +//@Constraint(severity="error", message="error", key = {r}) +pattern multipleEntryInRegion_M0(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M1(r : Region) { + find entryInRegion_M1(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M2(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M3(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M1(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M4(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M2(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M5(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); +} + + +pattern transition_M0(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t, trg); +} +pattern transition_M1(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Vertex(trg); +} +pattern transition_M2(t : Transition, src : Vertex, trg : Vertex) { + Vertex(src); + Transition.target(t, trg); +} +pattern transition_M3(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t_x, src); + Transition.target(t, trg); +} +pattern transition_M4(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t_x, trg); +} + +//@Constraint(severity="error", message="error", key = {e}) +pattern incomingToEntry_M0(t : Transition, e : Entry) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_1(t : Transition, e) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_2(t : Transition, e : Entry) { + find transition_M1(t, _, e); +} +pattern incomingToEntry_3(t : Transition, e : Entry) { + find transition_M2(t, _, e); +} +pattern incomingToEntry_4(t : Transition, e : Entry) { + find transition_M3(t, _, e); +} +pattern incomingToEntry_5(t : Transition, e : Entry) { + find transition_M4(t, _, e); +} + +pattern noOutgoingTransitionFromEntry_M0(e : Entry) { + neg find transition_M0(_, e, _); +} + +pattern noOutgoingTransitionFromEntry_M1(e) { + Vertex(e); + neg find transition_M0(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M2(e : Entry) { + neg find transition_M1(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M3(e : Entry) { + neg find transition_M2(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M4(e : Entry) { + neg find transition_M3(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M5(e : Entry) { + neg find transition_M4(_, e, _); +} + + +//@Constraint(severity="error", message="error", key = {e}) +pattern multipleTransitionFromEntry_M0(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M1(e, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M2(e : Entry, t1 : Transition, t2: Transition) { + Transition(t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M3(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Transition(t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M4(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); +} + +///////// +// Exit +///////// + +//@Constraint(severity="error", message="error", key = {e}) +pattern outgoingFromExit_M0(t : Transition, e : Exit) { + Exit.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M1(t : Transition, e) { + Vertex.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M2(t : Transition, e : Exit) { + Transition(t); + Exit(e); +} + +///////// +// Final +///////// + +//@Constraint(severity="error", message="error", key = {f}) +pattern outgoingFromFinal_M0(t : Transition, f : FinalState) { + FinalState.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M1(t : Transition, f) { + Vertex.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M2(t : Transition, f : FinalState) { + Transition(t); + FinalState(f); +} + +///////// +// State vs Region +///////// + +//@Constraint(severity="error", message="error", key = {region}) +pattern noStateInRegion_M0(region: Region) { + neg find StateInRegion_M0(region,_); +} +pattern noStateInRegion_M1(region: Region) { + neg find StateInRegion_M1(region,_); +} +pattern noStateInRegion_M2(region: Region) { + neg find StateInRegion_M2(region,_); +} +pattern noStateInRegion_M3(region: Region) { + find StateInRegion_M0(region,_); +} + +pattern StateInRegion_M0(region: Region, state: State) { + Region.vertices(region,state); +} +pattern StateInRegion_M1(region: Region, state) { + Region.vertices(region,state); +} +pattern StateInRegion_M2(region: Region, state:State) { + Region(region);State(state); +} + +///////// +// Choice +///////// + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoOutgoing_M0(c : Choice) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M1(c:Vertex) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M2(c : Choice) { + neg find transition_M1(_, c, _); +} +pattern choiceHasNoOutgoing_M3(c : Choice) { + neg find transition_M2(_, c, _); +} +pattern choiceHasNoOutgoing_M4(c : Choice) { + neg find transition_M3(_, c, _); +} +pattern choiceHasNoOutgoing_M5(c : Choice) { + neg find transition_M4(_, c, _); +} +pattern choiceHasNoOutgoing_M6(c : Choice) { + find transition_M0(_, c, _); +} + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoIncoming_M0(c: Choice) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M1(c:Vertex) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M2(c: Choice) { + neg find transition_M1(_, _, c); +} +pattern choiceHasNoIncoming_M3(c: Choice) { + neg find transition_M2(_, _, c); +} +pattern choiceHasNoIncoming_M4(c: Choice) { + neg find transition_M3(_, _, c); +} +pattern choiceHasNoIncoming_M5(c: Choice) { + neg find transition_M4(_, _, c); +} +pattern choiceHasNoIncoming_M6(c: Choice) { + find transition_M0(_, _, c); +} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 new file mode 100644 index 00000000..597b1691 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql @@ -0,0 +1,227 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries + +import epackage "YakinduMetamodel" + +///////// +// Entry +///////// + +pattern entryInRegion(r1 : Region, e1 : Entry) { + Region.vertices(r1, e1); +} + +@Constraint(severity="error", message="error", key = {r1}) +pattern noEntryInRegion(r1 : Region) { + neg find entryInRegion(r1, _); +} + +@Constraint(severity="error", message="error", key = {r}) +pattern multipleEntryInRegion(r : Region) { + find entryInRegion(r, e1); + find entryInRegion(r, e2); + e1 != e2; +} + +pattern transition(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t, trg); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern incomingToEntry(t : Transition, e : Entry) { + find transition(t, _, e); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern noOutgoingTransitionFromEntry(e : Entry) { + neg find transition(_, e, _); +} + +@Constraint(severity="error", message="error", key = {e}) +pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} + +///////// +// Exit +///////// + +@Constraint(severity="error", message="error", key = {e}) +pattern outgoingFromExit(t : Transition, e : Exit) { + Exit.outgoingTransitions(e,t); +} + +///////// +// Final +///////// + +@Constraint(severity="error", message="error", key = {f}) +pattern outgoingFromFinal(t : Transition, f : FinalState) { + FinalState.outgoingTransitions(f,t); +} + +///////// +// State vs Region +///////// + +@Constraint(severity="error", message="error", key = {region}) +pattern noStateInRegion(region: Region) { + neg find StateInRegion(region,_); +} +pattern StateInRegion(region: Region, state: State) { + Region.vertices(region,state); +} + +///////// +// Choice +///////// + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoOutgoing(c : Choice) { + neg find transition(_, c, _); +} + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoIncoming(c: Choice) { + neg find transition(_, _, c); +} + +///////// +// Synchronization +///////// + +@Constraint(severity="error", message="error", key = {s}) +pattern synchHasNoOutgoing(s : Synchronization) { + neg find transition(_, s, _); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern synchHasNoIncoming(s : Synchronization) { + neg find transition(_, _, s); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) { + find transition(t1, v1, s); + find transition(t2, v2, s); + t1!=t2; + Region.vertices(r, v1); + Region.vertices(r, v2); +} or { + find transition(t1, s, v1); + find transition(t2, s, v2); + t1!=t2; + Region.vertices(r, v1); + Region.vertices(r, v2); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern notSynchronizingStates(s : Synchronization) { + neg find hasMultipleOutgoingTrainsition(s); + neg find hasMultipleIncomingTrainsition(s); +} + +pattern hasMultipleOutgoingTrainsition(v : Synchronization) { + find transition(_, v, trg1); + find transition(_, v, trg2); + trg1 != trg2; +} + +pattern hasMultipleIncomingTrainsition(v : Synchronization) { + find transition(_, src1, v); + find transition(_, src2, v); + src1 != src2; +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) { + find transition(_, v1, s); + find transition(_, v2, s); + CompositeElement.regions.vertices(r1, v1); + CompositeElement.regions.vertices(r2, v2); + r1 != r2; +} or { + find transition(_, s, v1); + find transition(_, s, v2); + CompositeElement.regions.vertices(r1, v1); + CompositeElement.regions.vertices(r2, v2); + r1 != r2; +} + +/////////////////////////////// +// Extra +// +//@Constraint(severity="error", message="error", key = {s}) +//pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) { +// find transition(_, v, s); +// neg find child(_,v); +//} or { +// find transition(_, s, v); +// neg find child(_,v); +//} + +pattern child(parent: CompositeElement, child: Vertex) { + CompositeElement.regions.vertices(parent, child); +} + +@Constraint(severity="error", message="error", key = {s}) +pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) { + find transition(_, v, s); + find child(c,v); + neg find hasMultipleRegions(c); +} or { + find transition(_, s, v); + find child(c,v); + neg find hasMultipleRegions(c); +} + + +pattern hasMultipleRegions(composite: CompositeElement) { + CompositeElement.regions(composite,region1); + CompositeElement.regions(composite,region2); + region1 != region2; +} + +/** + * Simplifying model generation + */ +@Constraint(severity="error", message="error", key = {s}) +pattern synchThree(s: Synchronization) { + Transition.target(t1,s); + Transition.target(t2,s); + Transition.target(t3,s); + t1!=t2; + t2!=t3; + t1!=t3; +} or { + Transition.source(t1,s); + Transition.source(t2,s); + Transition.source(t3,s); + t1!=t2; + t2!=t3; + t1!=t3; +} + +/** + * Simplifying model generation + */ +@Constraint(severity="error", message="error", key = {s1,s2}) +pattern twoSynch(s1 : Synchronization, s2 : Synchronization) { + Synchronization(s1); + Synchronization(s2); + s1 != s2; +} + +/** + * Model generation task: at least one synch + */ +//@Constraint(severity="error", message="error", key = {s}) +//pattern noSynch(s:Statechart) { +// Statechart(s); +// neg find synch(_); +//} +//pattern synch(s:Synchronization) { +// Synchronization(s); +//} \ No newline at end of file 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 @@ +/.DirectSupertype.java._trace +/.Ecore.java._trace +/.LoopInInheritence.java._trace +/.NonSymmetricOpposite.java._trace +/.Opposite.java._trace +/.OppositeDifferentClass.java._trace +/.EcorePatterns.java._trace +/DirectSupertype.java +/EcorePatterns.java +/LoopInInheritence.java +/NonSymmetricOpposite.java +/Opposite.java +/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 @@ +/.FamPatterns.java._trace +/.Model.java._trace +/.Parent.java._trace +/.RootElements.java._trace +/.TerminatorAndInformation.java._trace +/.Type.java._trace +/FamPatterns.java +/Model.java +/Parent.java +/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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(message="terminatorAndInformation", severity="error", key={T})
+ *         pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
+ *         	FunctionalOutput.outgoingLinks(Out,I);
+ *         	FunctionalOutput.terminator(Out,T); 
+ *         } or {
+ *         	InformationLink.to(I,In);
+ *         	FunctionalInput.terminator(In,T);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class TerminatorAndInformation extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private FAMTerminator fT; + + private InformationLink fI; + + private static List parameterNames = makeImmutableList("T", "I"); + + private Match(final FAMTerminator pT, final InformationLink pI) { + this.fT = pT; + this.fI = pI; + } + + @Override + public Object get(final String parameterName) { + if ("T".equals(parameterName)) return this.fT; + if ("I".equals(parameterName)) return this.fI; + return null; + } + + public FAMTerminator getT() { + return this.fT; + } + + public InformationLink getI() { + return this.fI; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("T".equals(parameterName) ) { + this.fT = (FAMTerminator) newValue; + return true; + } + if ("I".equals(parameterName) ) { + this.fI = (InformationLink) newValue; + return true; + } + return false; + } + + public void setT(final FAMTerminator pT) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT = pT; + } + + public void setI(final InformationLink pI) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fI = pI; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation"; + } + + @Override + public List parameterNames() { + return TerminatorAndInformation.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fT, fI}; + } + + @Override + public TerminatorAndInformation.Match toImmutable() { + return isMutable() ? newMatch(fT, fI) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"T\"=" + prettyPrintValue(fT) + ", "); + result.append("\"I\"=" + prettyPrintValue(fI)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fT, fI); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof TerminatorAndInformation.Match)) { + TerminatorAndInformation.Match other = (TerminatorAndInformation.Match) obj; + return Objects.equals(fT, other.fT) && Objects.equals(fI, other.fI); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public TerminatorAndInformation specification() { + return TerminatorAndInformation.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static TerminatorAndInformation.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static TerminatorAndInformation.Match newMutableMatch(final FAMTerminator pT, final InformationLink pI) { + return new Mutable(pT, pI); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return the (partial) match object. + * + */ + public static TerminatorAndInformation.Match newMatch(final FAMTerminator pT, final InformationLink pI) { + return new Immutable(pT, pI); + } + + private static final class Mutable extends TerminatorAndInformation.Match { + Mutable(final FAMTerminator pT, final InformationLink pI) { + super(pT, pI); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends TerminatorAndInformation.Match { + Immutable(final FAMTerminator pT, final InformationLink pI) { + super(pT, pI); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(message="terminatorAndInformation", severity="error", key={T})
+   * pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
+   * 	FunctionalOutput.outgoingLinks(Out,I);
+   * 	FunctionalOutput.terminator(Out,T); 
+   * } or {
+   * 	InformationLink.to(I,In);
+   * 	FunctionalInput.terminator(In,T);
+   * }
+   * 
+ * + * @see Match + * @see TerminatorAndInformation + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static TerminatorAndInformation.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static TerminatorAndInformation.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_T = 0; + + private final static int POSITION_I = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(TerminatorAndInformation.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final FAMTerminator pT, final InformationLink pI) { + return rawStreamAllMatches(new Object[]{pT, pI}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final FAMTerminator pT, final InformationLink pI) { + return rawStreamAllMatches(new Object[]{pT, pI}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final FAMTerminator pT, final InformationLink pI) { + return rawGetOneArbitraryMatch(new Object[]{pT, pI}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final FAMTerminator pT, final InformationLink pI) { + return rawHasMatch(new Object[]{pT, pI}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final FAMTerminator pT, final InformationLink pI) { + return rawCountMatches(new Object[]{pT, pI}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final FAMTerminator pT, final InformationLink pI, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pT, pI}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter T, or null if not bound. + * @param pI the fixed value of pattern parameter I, or null if not bound. + * @return the (partial) match object. + * + */ + public TerminatorAndInformation.Match newMatch(final FAMTerminator pT, final InformationLink pI) { + return TerminatorAndInformation.Match.newMatch(pT, pI); + } + + /** + * Retrieve the set of values that occur in matches for T. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfT(final Object[] parameters) { + return rawStreamAllValues(POSITION_T, parameters).map(FAMTerminator.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for T. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfT() { + return rawStreamAllValuesOfT(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for T. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfT() { + return rawStreamAllValuesOfT(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for T. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfT(final TerminatorAndInformation.Match partialMatch) { + return rawStreamAllValuesOfT(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for T. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfT(final InformationLink pI) { + return rawStreamAllValuesOfT(new Object[]{null, pI}); + } + + /** + * Retrieve the set of values that occur in matches for T. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfT(final TerminatorAndInformation.Match partialMatch) { + return rawStreamAllValuesOfT(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for T. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfT(final InformationLink pI) { + return rawStreamAllValuesOfT(new Object[]{null, pI}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for I. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfI(final Object[] parameters) { + return rawStreamAllValues(POSITION_I, parameters).map(InformationLink.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for I. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfI() { + return rawStreamAllValuesOfI(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for I. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfI() { + return rawStreamAllValuesOfI(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for I. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfI(final TerminatorAndInformation.Match partialMatch) { + return rawStreamAllValuesOfI(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for I. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfI(final FAMTerminator pT) { + return rawStreamAllValuesOfI(new Object[]{pT, null}); + } + + /** + * Retrieve the set of values that occur in matches for I. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfI(final TerminatorAndInformation.Match partialMatch) { + return rawStreamAllValuesOfI(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for I. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfI(final FAMTerminator pT) { + return rawStreamAllValuesOfI(new Object[]{pT, null}).collect(Collectors.toSet()); + } + + @Override + protected TerminatorAndInformation.Match tupleToMatch(final Tuple t) { + try { + return TerminatorAndInformation.Match.newMatch((FAMTerminator) t.get(POSITION_T), (InformationLink) t.get(POSITION_I)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected TerminatorAndInformation.Match arrayToMatch(final Object[] match) { + try { + return TerminatorAndInformation.Match.newMatch((FAMTerminator) match[POSITION_T], (InformationLink) match[POSITION_I]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected TerminatorAndInformation.Match arrayToMatchMutable(final Object[] match) { + try { + return TerminatorAndInformation.Match.newMutableMatch((FAMTerminator) match[POSITION_T], (InformationLink) match[POSITION_I]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return TerminatorAndInformation.instance(); + } + } + + private TerminatorAndInformation() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static TerminatorAndInformation instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected TerminatorAndInformation.Matcher instantiate(final ViatraQueryEngine engine) { + return TerminatorAndInformation.Matcher.on(engine); + } + + @Override + public TerminatorAndInformation.Matcher instantiate() { + return TerminatorAndInformation.Matcher.create(); + } + + @Override + public TerminatorAndInformation.Match newEmptyMatch() { + return TerminatorAndInformation.Match.newEmptyMatch(); + } + + @Override + public TerminatorAndInformation.Match newMatch(final Object... parameters) { + return TerminatorAndInformation.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static TerminatorAndInformation INSTANCE = new TerminatorAndInformation(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static TerminatorAndInformation.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_T = new PParameter("T", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "FAMTerminator")), PParameterDirection.INOUT); + + private final PParameter parameter_I = new PParameter("I", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "InformationLink")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_T, parameter_I); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("T","I"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_T = body.getOrCreateVariableByName("T"); + PVariable var_I = body.getOrCreateVariableByName("I"); + PVariable var_Out = body.getOrCreateVariableByName("Out"); + new TypeConstraint(body, Tuples.flatTupleOf(var_T), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_T, parameter_T), + new ExportedParameter(body, var_I, parameter_I) + )); + // FunctionalOutput.outgoingLinks(Out,I) + new TypeConstraint(body, Tuples.flatTupleOf(var_Out), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalOutput"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_Out, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalOutput", "outgoingLinks"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink"))); + new Equality(body, var__virtual_0_, var_I); + // FunctionalOutput.terminator(Out,T) + new TypeConstraint(body, Tuples.flatTupleOf(var_Out), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalOutput"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_Out, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalData", "terminator"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator"))); + new Equality(body, var__virtual_1_, var_T); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_T = body.getOrCreateVariableByName("T"); + PVariable var_I = body.getOrCreateVariableByName("I"); + PVariable var_In = body.getOrCreateVariableByName("In"); + new TypeConstraint(body, Tuples.flatTupleOf(var_T), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_T, parameter_T), + new ExportedParameter(body, var_I, parameter_I) + )); + // InformationLink.to(I,In) + new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_I, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "InformationLink", "to"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalInput"))); + new Equality(body, var__virtual_0_, var_In); + // FunctionalInput.terminator(In,T) + new TypeConstraint(body, Tuples.flatTupleOf(var_In), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalInput"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_In, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalData", "terminator"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator"))); + new Equality(body, var__virtual_1_, var_T); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("message", "terminatorAndInformation"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("T") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Parent; +import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.RootElements; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}QueryBasedFeature 
+ *         pattern type(This : Function, Target : FunctionType) = {
+ *         	find rootElements(_Model, This);
+ *         	Target == FunctionType::Root;
+ *         } or {
+ *         	neg find parent(_Child, This);
+ *         	neg find rootElements(_Model, This);
+ *         	Target == FunctionType::Leaf;
+ *         } or  {
+ *         	find parent(This, _Par);
+ *         	find parent(_Child, This);
+ *         	Target == FunctionType::Intermediate;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class Type extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Function fThis; + + private FunctionType fTarget; + + private static List parameterNames = makeImmutableList("This", "Target"); + + private Match(final Function pThis, final FunctionType pTarget) { + this.fThis = pThis; + this.fTarget = pTarget; + } + + @Override + public Object get(final String parameterName) { + if ("This".equals(parameterName)) return this.fThis; + if ("Target".equals(parameterName)) return this.fTarget; + return null; + } + + public Function getThis() { + return this.fThis; + } + + public FunctionType getTarget() { + return this.fTarget; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("This".equals(parameterName) ) { + this.fThis = (Function) newValue; + return true; + } + if ("Target".equals(parameterName) ) { + this.fTarget = (FunctionType) newValue; + return true; + } + return false; + } + + public void setThis(final Function pThis) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fThis = pThis; + } + + public void setTarget(final FunctionType pTarget) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fTarget = pTarget; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"; + } + + @Override + public List parameterNames() { + return Type.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fThis, fTarget}; + } + + @Override + public Type.Match toImmutable() { + return isMutable() ? newMatch(fThis, fTarget) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"This\"=" + prettyPrintValue(fThis) + ", "); + result.append("\"Target\"=" + prettyPrintValue(fTarget)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fThis, fTarget); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof Type.Match)) { + Type.Match other = (Type.Match) obj; + return Objects.equals(fThis, other.fThis) && Objects.equals(fTarget, other.fTarget); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public Type specification() { + return Type.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static Type.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static Type.Match newMutableMatch(final Function pThis, final FunctionType pTarget) { + return new Mutable(pThis, pTarget); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return the (partial) match object. + * + */ + public static Type.Match newMatch(final Function pThis, final FunctionType pTarget) { + return new Immutable(pThis, pTarget); + } + + private static final class Mutable extends Type.Match { + Mutable(final Function pThis, final FunctionType pTarget) { + super(pThis, pTarget); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends Type.Match { + Immutable(final Function pThis, final FunctionType pTarget) { + super(pThis, pTarget); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}QueryBasedFeature 
+   * pattern type(This : Function, Target : FunctionType) = {
+   * 	find rootElements(_Model, This);
+   * 	Target == FunctionType::Root;
+   * } or {
+   * 	neg find parent(_Child, This);
+   * 	neg find rootElements(_Model, This);
+   * 	Target == FunctionType::Leaf;
+   * } or  {
+   * 	find parent(This, _Par);
+   * 	find parent(_Child, This);
+   * 	Target == FunctionType::Intermediate;
+   * }
+   * 
+ * + * @see Match + * @see Type + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static Type.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static Type.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_THIS = 0; + + private final static int POSITION_TARGET = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Type.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Function pThis, final FunctionType pTarget) { + return rawStreamAllMatches(new Object[]{pThis, pTarget}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Function pThis, final FunctionType pTarget) { + return rawStreamAllMatches(new Object[]{pThis, pTarget}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Function pThis, final FunctionType pTarget) { + return rawGetOneArbitraryMatch(new Object[]{pThis, pTarget}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Function pThis, final FunctionType pTarget) { + return rawHasMatch(new Object[]{pThis, pTarget}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Function pThis, final FunctionType pTarget) { + return rawCountMatches(new Object[]{pThis, pTarget}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Function pThis, final FunctionType pTarget, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pThis, pTarget}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pThis the fixed value of pattern parameter This, or null if not bound. + * @param pTarget the fixed value of pattern parameter Target, or null if not bound. + * @return the (partial) match object. + * + */ + public Type.Match newMatch(final Function pThis, final FunctionType pTarget) { + return Type.Match.newMatch(pThis, pTarget); + } + + /** + * Retrieve the set of values that occur in matches for This. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfThis(final Object[] parameters) { + return rawStreamAllValues(POSITION_THIS, parameters).map(Function.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for This. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfThis() { + return rawStreamAllValuesOfThis(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for This. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfThis() { + return rawStreamAllValuesOfThis(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for This. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfThis(final Type.Match partialMatch) { + return rawStreamAllValuesOfThis(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for This. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfThis(final FunctionType pTarget) { + return rawStreamAllValuesOfThis(new Object[]{null, pTarget}); + } + + /** + * Retrieve the set of values that occur in matches for This. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfThis(final Type.Match partialMatch) { + return rawStreamAllValuesOfThis(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for This. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfThis(final FunctionType pTarget) { + return rawStreamAllValuesOfThis(new Object[]{null, pTarget}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for Target. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfTarget(final Object[] parameters) { + return rawStreamAllValues(POSITION_TARGET, parameters).map(FunctionType.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for Target. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfTarget() { + return rawStreamAllValuesOfTarget(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for Target. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfTarget() { + return rawStreamAllValuesOfTarget(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for Target. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfTarget(final Type.Match partialMatch) { + return rawStreamAllValuesOfTarget(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for Target. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfTarget(final Function pThis) { + return rawStreamAllValuesOfTarget(new Object[]{pThis, null}); + } + + /** + * Retrieve the set of values that occur in matches for Target. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfTarget(final Type.Match partialMatch) { + return rawStreamAllValuesOfTarget(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for Target. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfTarget(final Function pThis) { + return rawStreamAllValuesOfTarget(new Object[]{pThis, null}).collect(Collectors.toSet()); + } + + @Override + protected Type.Match tupleToMatch(final Tuple t) { + try { + return Type.Match.newMatch((Function) t.get(POSITION_THIS), (FunctionType) t.get(POSITION_TARGET)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected Type.Match arrayToMatch(final Object[] match) { + try { + return Type.Match.newMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected Type.Match arrayToMatchMutable(final Object[] match) { + try { + return Type.Match.newMutableMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return Type.instance(); + } + } + + private Type() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static Type instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected Type.Matcher instantiate(final ViatraQueryEngine engine) { + return Type.Matcher.on(engine); + } + + @Override + public Type.Matcher instantiate() { + return Type.Matcher.create(); + } + + @Override + public Type.Match newEmptyMatch() { + return Type.Match.newEmptyMatch(); + } + + @Override + public Type.Match newMatch(final Object... parameters) { + return Type.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static Type INSTANCE = new Type(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static Type.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_This = new PParameter("This", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "Function")), PParameterDirection.INOUT); + + private final PParameter parameter_Target = new PParameter("Target", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType", new EDataTypeInSlotsKey((EDataType)getClassifierLiteralSafe("FamMetamodel", "FunctionType")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_This, parameter_Target); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("This","Target"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_This = body.getOrCreateVariableByName("This"); + PVariable var_Target = body.getOrCreateVariableByName("Target"); + PVariable var__Model = body.getOrCreateVariableByName("_Model"); + new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_This, parameter_This), + new ExportedParameter(body, var_Target, parameter_Target) + )); + // find rootElements(_Model, This) + new PositivePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation()); + // Target == FunctionType::Root + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Root").getInstance()); + new Equality(body, var_Target, var__virtual_0_); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_This = body.getOrCreateVariableByName("This"); + PVariable var_Target = body.getOrCreateVariableByName("Target"); + PVariable var__Child = body.getOrCreateVariableByName("_Child"); + PVariable var__Model = body.getOrCreateVariableByName("_Model"); + new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_This, parameter_This), + new ExportedParameter(body, var_Target, parameter_Target) + )); + // neg find parent(_Child, This) + new NegativePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation()); + // neg find rootElements(_Model, This) + new NegativePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation()); + // Target == FunctionType::Leaf + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Leaf").getInstance()); + new Equality(body, var_Target, var__virtual_0_); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_This = body.getOrCreateVariableByName("This"); + PVariable var_Target = body.getOrCreateVariableByName("Target"); + PVariable var__Par = body.getOrCreateVariableByName("_Par"); + PVariable var__Child = body.getOrCreateVariableByName("_Child"); + new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_This, parameter_This), + new ExportedParameter(body, var_Target, parameter_Target) + )); + // find parent(This, _Par) + new PositivePatternCall(body, Tuples.flatTupleOf(var_This, var__Par), Parent.instance().getInternalQueryRepresentation()); + // find parent(_Child, This) + new PositivePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation()); + // Target == FunctionType::Intermediate + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Intermediate").getInstance()); + new Equality(body, var_Target, var__virtual_0_); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("QueryBasedFeature"); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/.ContentInNotLive.java._trace +/.FileSystem.java._trace +/.Live.java._trace +/.PatternContent.java._trace +/.FileSystemPatterns.java._trace +/PatternContent.java +/ContentInNotLive.java +/FileSystemPatterns.java +/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 @@ +/.EntryInRegion_M0.java._trace +/.EntryInRegion_M1.java._trace +/.EntryInRegion_M2.java._trace +/.MultipleEntryInRegion_M0.java._trace +/.MultipleEntryInRegion_M1.java._trace +/.MultipleEntryInRegion_M2.java._trace +/.NoEntryInRegion_M0.java._trace +/.NoEntryInRegion_M1.java._trace +/.NoEntryInRegion_M2.java._trace +/.NoEntryInRegion_M3.java._trace +/.NoEntryInRegion_M4.java._trace +/.NoEntryInRegion_M5.java._trace +/.MultipleEntryInRegion_M3.java._trace +/.EntryInRegion.java._trace +/.MultipleEntryInRegion.java._trace +/.NoEntryInRegion.java._trace +/.Transition.java._trace +/.Child.java._trace +/.ChoiceHasNoIncoming.java._trace +/.ChoiceHasNoOutgoing.java._trace +/.HasMultipleIncomingTrainsition.java._trace +/.HasMultipleOutgoingTrainsition.java._trace +/.HasMultipleRegions.java._trace +/.IncomingToEntry.java._trace +/.MultipleTransitionFromEntry.java._trace +/.NoOutgoingTransitionFromEntry.java._trace +/.NoStateInRegion.java._trace +/.NotSynchronizingStates.java._trace +/.OutgoingFromExit.java._trace +/.OutgoingFromFinal.java._trace +/.StateInRegion.java._trace +/.SynchHasNoIncoming.java._trace +/.SynchHasNoOutgoing.java._trace +/.SynchThree.java._trace +/.SynchronizedIncomingInSameRegion.java._trace +/.SynchronizedRegionDoesNotHaveMultipleRegions.java._trace +/.SynchronizedRegionsAreNotSiblings.java._trace +/.TwoSynch.java._trace +/.YakinduPatterns.java._trace +/.ChoiceHasNoIncoming_M0.java._trace +/.ChoiceHasNoIncoming_M1.java._trace +/.ChoiceHasNoIncoming_M2.java._trace +/.ChoiceHasNoIncoming_M3.java._trace +/.ChoiceHasNoIncoming_M4.java._trace +/.ChoiceHasNoIncoming_M5.java._trace +/.ChoiceHasNoIncoming_M6.java._trace +/.ChoiceHasNoOutgoing_M0.java._trace +/.ChoiceHasNoOutgoing_M1.java._trace +/.ChoiceHasNoOutgoing_M2.java._trace +/.ChoiceHasNoOutgoing_M3.java._trace +/.ChoiceHasNoOutgoing_M4.java._trace +/.ChoiceHasNoOutgoing_M5.java._trace +/.ChoiceHasNoOutgoing_M6.java._trace +/.IncomingToEntry_1.java._trace +/.IncomingToEntry_2.java._trace +/.IncomingToEntry_3.java._trace +/.IncomingToEntry_4.java._trace +/.IncomingToEntry_5.java._trace +/.IncomingToEntry_M0.java._trace +/.MultipleEntryInRegion_M4.java._trace +/.MultipleEntryInRegion_M5.java._trace +/.MultipleTransitionFromEntry_M0.java._trace +/.MultipleTransitionFromEntry_M1.java._trace +/.MultipleTransitionFromEntry_M2.java._trace +/.MultipleTransitionFromEntry_M3.java._trace +/.MultipleTransitionFromEntry_M4.java._trace +/.NoOutgoingTransitionFromEntry_M0.java._trace +/.NoOutgoingTransitionFromEntry_M1.java._trace +/.NoOutgoingTransitionFromEntry_M2.java._trace +/.NoOutgoingTransitionFromEntry_M3.java._trace +/.NoOutgoingTransitionFromEntry_M4.java._trace +/.NoOutgoingTransitionFromEntry_M5.java._trace +/.NoStateInRegion_M0.java._trace +/.NoStateInRegion_M1.java._trace +/.NoStateInRegion_M2.java._trace +/.NoStateInRegion_M3.java._trace +/.OutgoingFromExit_M0.java._trace +/.OutgoingFromExit_M1.java._trace +/.OutgoingFromExit_M2.java._trace +/.OutgoingFromFinal_M0.java._trace +/.OutgoingFromFinal_M1.java._trace +/.OutgoingFromFinal_M2.java._trace +/.StateInRegion_M0.java._trace +/.StateInRegion_M1.java._trace +/.StateInRegion_M2.java._trace +/.Transition_M0.java._trace +/.Transition_M1.java._trace +/.Transition_M2.java._trace +/.Transition_M3.java._trace +/.Transition_M4.java._trace +/.YakinduMutatedPatterns.java._trace +/YakinduPatterns.java +/MultipleEntryInRegion.java +/ChoiceHasNoIncoming_M0.java +/ChoiceHasNoIncoming_M1.java +/ChoiceHasNoIncoming_M2.java +/ChoiceHasNoIncoming_M3.java +/ChoiceHasNoIncoming_M4.java +/ChoiceHasNoIncoming_M5.java +/ChoiceHasNoIncoming_M6.java +/ChoiceHasNoOutgoing_M0.java +/ChoiceHasNoOutgoing_M1.java +/ChoiceHasNoOutgoing_M2.java +/ChoiceHasNoOutgoing_M3.java +/ChoiceHasNoOutgoing_M4.java +/ChoiceHasNoOutgoing_M5.java +/ChoiceHasNoOutgoing_M6.java +/EntryInRegion_M0.java +/EntryInRegion_M1.java +/EntryInRegion_M2.java +/IncomingToEntry_1.java +/IncomingToEntry_2.java +/IncomingToEntry_3.java +/IncomingToEntry_4.java +/IncomingToEntry_5.java +/IncomingToEntry_M0.java +/MultipleEntryInRegion_M0.java +/MultipleEntryInRegion_M1.java +/MultipleEntryInRegion_M2.java +/MultipleEntryInRegion_M3.java +/MultipleEntryInRegion_M4.java +/MultipleEntryInRegion_M5.java +/MultipleTransitionFromEntry_M0.java +/MultipleTransitionFromEntry_M1.java +/MultipleTransitionFromEntry_M2.java +/MultipleTransitionFromEntry_M3.java +/MultipleTransitionFromEntry_M4.java +/NoEntryInRegion_M0.java +/NoEntryInRegion_M1.java +/NoEntryInRegion_M2.java +/NoEntryInRegion_M3.java +/NoEntryInRegion_M4.java +/NoEntryInRegion_M5.java +/NoOutgoingTransitionFromEntry_M0.java +/NoOutgoingTransitionFromEntry_M1.java +/NoOutgoingTransitionFromEntry_M2.java +/NoOutgoingTransitionFromEntry_M3.java +/NoOutgoingTransitionFromEntry_M4.java +/NoOutgoingTransitionFromEntry_M5.java +/NoStateInRegion_M0.java +/NoStateInRegion_M1.java +/NoStateInRegion_M2.java +/NoStateInRegion_M3.java +/OutgoingFromExit_M0.java +/OutgoingFromExit_M1.java +/OutgoingFromExit_M2.java +/OutgoingFromFinal_M0.java +/OutgoingFromFinal_M1.java +/OutgoingFromFinal_M2.java +/StateInRegion_M0.java +/StateInRegion_M1.java +/StateInRegion_M2.java +/Transition_M0.java +/Transition_M1.java +/Transition_M2.java +/Transition_M3.java +/Transition_M4.java +/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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         ///////////////////////////////
+ *         // Extra
+ *         //
+ *         //{@literal @}Constraint(severity="error", message="error", key = {s})
+ *         //pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) {
+ *         //	find transition(_, v, s);
+ *         //	neg find child(_,v);
+ *         //} or {
+ *         //	find transition(_, s, v);
+ *         //	neg find child(_,v);
+ *         //}
+ *         
+ *         pattern child(parent: CompositeElement, child: Vertex) {
+ *         	CompositeElement.regions.vertices(parent, child);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class Child extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private CompositeElement fParent; + + private Vertex fChild; + + private static List parameterNames = makeImmutableList("parent", "child"); + + private Match(final CompositeElement pParent, final Vertex pChild) { + this.fParent = pParent; + this.fChild = pChild; + } + + @Override + public Object get(final String parameterName) { + if ("parent".equals(parameterName)) return this.fParent; + if ("child".equals(parameterName)) return this.fChild; + return null; + } + + public CompositeElement getParent() { + return this.fParent; + } + + public Vertex getChild() { + return this.fChild; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("parent".equals(parameterName) ) { + this.fParent = (CompositeElement) newValue; + return true; + } + if ("child".equals(parameterName) ) { + this.fChild = (Vertex) newValue; + return true; + } + return false; + } + + public void setParent(final CompositeElement pParent) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fParent = pParent; + } + + public void setChild(final Vertex pChild) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fChild = pChild; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child"; + } + + @Override + public List parameterNames() { + return Child.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fParent, fChild}; + } + + @Override + public Child.Match toImmutable() { + return isMutable() ? newMatch(fParent, fChild) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"parent\"=" + prettyPrintValue(fParent) + ", "); + result.append("\"child\"=" + prettyPrintValue(fChild)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fParent, fChild); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof Child.Match)) { + Child.Match other = (Child.Match) obj; + return Objects.equals(fParent, other.fParent) && Objects.equals(fChild, other.fChild); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public Child specification() { + return Child.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static Child.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static Child.Match newMutableMatch(final CompositeElement pParent, final Vertex pChild) { + return new Mutable(pParent, pChild); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return the (partial) match object. + * + */ + public static Child.Match newMatch(final CompositeElement pParent, final Vertex pChild) { + return new Immutable(pParent, pChild); + } + + private static final class Mutable extends Child.Match { + Mutable(final CompositeElement pParent, final Vertex pChild) { + super(pParent, pChild); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends Child.Match { + Immutable(final CompositeElement pParent, final Vertex pChild) { + super(pParent, pChild); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * ///////////////////////////////
+   * // Extra
+   * //
+   * //{@literal @}Constraint(severity="error", message="error", key = {s})
+   * //pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) {
+   * //	find transition(_, v, s);
+   * //	neg find child(_,v);
+   * //} or {
+   * //	find transition(_, s, v);
+   * //	neg find child(_,v);
+   * //}
+   * 
+   * pattern child(parent: CompositeElement, child: Vertex) {
+   * 	CompositeElement.regions.vertices(parent, child);
+   * }
+   * 
+ * + * @see Match + * @see Child + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static Child.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static Child.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_PARENT = 0; + + private final static int POSITION_CHILD = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Child.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final CompositeElement pParent, final Vertex pChild) { + return rawStreamAllMatches(new Object[]{pParent, pChild}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final CompositeElement pParent, final Vertex pChild) { + return rawStreamAllMatches(new Object[]{pParent, pChild}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final CompositeElement pParent, final Vertex pChild) { + return rawGetOneArbitraryMatch(new Object[]{pParent, pChild}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final CompositeElement pParent, final Vertex pChild) { + return rawHasMatch(new Object[]{pParent, pChild}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final CompositeElement pParent, final Vertex pChild) { + return rawCountMatches(new Object[]{pParent, pChild}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final CompositeElement pParent, final Vertex pChild, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pParent, pChild}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pParent the fixed value of pattern parameter parent, or null if not bound. + * @param pChild the fixed value of pattern parameter child, or null if not bound. + * @return the (partial) match object. + * + */ + public Child.Match newMatch(final CompositeElement pParent, final Vertex pChild) { + return Child.Match.newMatch(pParent, pChild); + } + + /** + * Retrieve the set of values that occur in matches for parent. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfparent(final Object[] parameters) { + return rawStreamAllValues(POSITION_PARENT, parameters).map(CompositeElement.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for parent. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfparent() { + return rawStreamAllValuesOfparent(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for parent. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfparent() { + return rawStreamAllValuesOfparent(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for parent. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfparent(final Child.Match partialMatch) { + return rawStreamAllValuesOfparent(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for parent. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfparent(final Vertex pChild) { + return rawStreamAllValuesOfparent(new Object[]{null, pChild}); + } + + /** + * Retrieve the set of values that occur in matches for parent. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfparent(final Child.Match partialMatch) { + return rawStreamAllValuesOfparent(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for parent. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfparent(final Vertex pChild) { + return rawStreamAllValuesOfparent(new Object[]{null, pChild}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for child. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfchild(final Object[] parameters) { + return rawStreamAllValues(POSITION_CHILD, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for child. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfchild() { + return rawStreamAllValuesOfchild(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for child. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfchild() { + return rawStreamAllValuesOfchild(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for child. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfchild(final Child.Match partialMatch) { + return rawStreamAllValuesOfchild(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for child. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfchild(final CompositeElement pParent) { + return rawStreamAllValuesOfchild(new Object[]{pParent, null}); + } + + /** + * Retrieve the set of values that occur in matches for child. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfchild(final Child.Match partialMatch) { + return rawStreamAllValuesOfchild(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for child. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfchild(final CompositeElement pParent) { + return rawStreamAllValuesOfchild(new Object[]{pParent, null}).collect(Collectors.toSet()); + } + + @Override + protected Child.Match tupleToMatch(final Tuple t) { + try { + return Child.Match.newMatch((CompositeElement) t.get(POSITION_PARENT), (Vertex) t.get(POSITION_CHILD)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected Child.Match arrayToMatch(final Object[] match) { + try { + return Child.Match.newMatch((CompositeElement) match[POSITION_PARENT], (Vertex) match[POSITION_CHILD]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected Child.Match arrayToMatchMutable(final Object[] match) { + try { + return Child.Match.newMutableMatch((CompositeElement) match[POSITION_PARENT], (Vertex) match[POSITION_CHILD]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return Child.instance(); + } + } + + private Child() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static Child instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected Child.Matcher instantiate(final ViatraQueryEngine engine) { + return Child.Matcher.on(engine); + } + + @Override + public Child.Matcher instantiate() { + return Child.Matcher.create(); + } + + @Override + public Child.Match newEmptyMatch() { + return Child.Match.newEmptyMatch(); + } + + @Override + public Child.Match newMatch(final Object... parameters) { + return Child.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static Child INSTANCE = new Child(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static Child.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_parent = new PParameter("parent", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "CompositeElement")), PParameterDirection.INOUT); + + private final PParameter parameter_child = new PParameter("child", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_parent, parameter_child); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("parent","child"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_parent = body.getOrCreateVariableByName("parent"); + PVariable var_child = body.getOrCreateVariableByName("child"); + new TypeConstraint(body, Tuples.flatTupleOf(var_parent), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_child), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_parent, parameter_parent), + new ExportedParameter(body, var_child, parameter_child) + )); + // CompositeElement.regions.vertices(parent, child) + new TypeConstraint(body, Tuples.flatTupleOf(var_parent), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_parent, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_child); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {c})
+ *         pattern choiceHasNoIncoming(c: Choice) {
+ *         	neg find transition(_, _, c);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class ChoiceHasNoIncoming extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Choice fC; + + private static List parameterNames = makeImmutableList("c"); + + private Match(final Choice pC) { + this.fC = pC; + } + + @Override + public Object get(final String parameterName) { + if ("c".equals(parameterName)) return this.fC; + return null; + } + + public Choice getC() { + return this.fC; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("c".equals(parameterName) ) { + this.fC = (Choice) newValue; + return true; + } + return false; + } + + public void setC(final Choice pC) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fC = pC; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming"; + } + + @Override + public List parameterNames() { + return ChoiceHasNoIncoming.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fC}; + } + + @Override + public ChoiceHasNoIncoming.Match toImmutable() { + return isMutable() ? newMatch(fC) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"c\"=" + prettyPrintValue(fC)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fC); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof ChoiceHasNoIncoming.Match)) { + ChoiceHasNoIncoming.Match other = (ChoiceHasNoIncoming.Match) obj; + return Objects.equals(fC, other.fC); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public ChoiceHasNoIncoming specification() { + return ChoiceHasNoIncoming.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static ChoiceHasNoIncoming.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static ChoiceHasNoIncoming.Match newMutableMatch(final Choice pC) { + return new Mutable(pC); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the (partial) match object. + * + */ + public static ChoiceHasNoIncoming.Match newMatch(final Choice pC) { + return new Immutable(pC); + } + + private static final class Mutable extends ChoiceHasNoIncoming.Match { + Mutable(final Choice pC) { + super(pC); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends ChoiceHasNoIncoming.Match { + Immutable(final Choice pC) { + super(pC); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {c})
+   * pattern choiceHasNoIncoming(c: Choice) {
+   * 	neg find transition(_, _, c);
+   * }
+   * 
+ * + * @see Match + * @see ChoiceHasNoIncoming + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static ChoiceHasNoIncoming.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static ChoiceHasNoIncoming.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_C = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(ChoiceHasNoIncoming.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Choice pC) { + return rawStreamAllMatches(new Object[]{pC}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Choice pC) { + return rawStreamAllMatches(new Object[]{pC}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Choice pC) { + return rawGetOneArbitraryMatch(new Object[]{pC}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Choice pC) { + return rawHasMatch(new Object[]{pC}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Choice pC) { + return rawCountMatches(new Object[]{pC}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Choice pC, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pC}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the (partial) match object. + * + */ + public ChoiceHasNoIncoming.Match newMatch(final Choice pC) { + return ChoiceHasNoIncoming.Match.newMatch(pC); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfc(final Object[] parameters) { + return rawStreamAllValues(POSITION_C, parameters).map(Choice.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfc() { + return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfc() { + return rawStreamAllValuesOfc(emptyArray()); + } + + @Override + protected ChoiceHasNoIncoming.Match tupleToMatch(final Tuple t) { + try { + return ChoiceHasNoIncoming.Match.newMatch((Choice) t.get(POSITION_C)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected ChoiceHasNoIncoming.Match arrayToMatch(final Object[] match) { + try { + return ChoiceHasNoIncoming.Match.newMatch((Choice) match[POSITION_C]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected ChoiceHasNoIncoming.Match arrayToMatchMutable(final Object[] match) { + try { + return ChoiceHasNoIncoming.Match.newMutableMatch((Choice) match[POSITION_C]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return ChoiceHasNoIncoming.instance(); + } + } + + private ChoiceHasNoIncoming() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static ChoiceHasNoIncoming instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected ChoiceHasNoIncoming.Matcher instantiate(final ViatraQueryEngine engine) { + return ChoiceHasNoIncoming.Matcher.on(engine); + } + + @Override + public ChoiceHasNoIncoming.Matcher instantiate() { + return ChoiceHasNoIncoming.Matcher.create(); + } + + @Override + public ChoiceHasNoIncoming.Match newEmptyMatch() { + return ChoiceHasNoIncoming.Match.newEmptyMatch(); + } + + @Override + public ChoiceHasNoIncoming.Match newMatch(final Object... parameters) { + return ChoiceHasNoIncoming.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static ChoiceHasNoIncoming INSTANCE = new ChoiceHasNoIncoming(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static ChoiceHasNoIncoming.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_c = new PParameter("c", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Choice")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_c); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("c"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_c = body.getOrCreateVariableByName("c"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Choice"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_c, parameter_c) + )); + // neg find transition(_, _, c) + new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var___1_, var_c), Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("c") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // Choice
+ *         /////////
+ *         
+ *         {@literal @}Constraint(severity="error", message="error", key = {c})
+ *         pattern choiceHasNoOutgoing(c : Choice) {
+ *         	neg find transition(_, c, _);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class ChoiceHasNoOutgoing extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Choice fC; + + private static List parameterNames = makeImmutableList("c"); + + private Match(final Choice pC) { + this.fC = pC; + } + + @Override + public Object get(final String parameterName) { + if ("c".equals(parameterName)) return this.fC; + return null; + } + + public Choice getC() { + return this.fC; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("c".equals(parameterName) ) { + this.fC = (Choice) newValue; + return true; + } + return false; + } + + public void setC(final Choice pC) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fC = pC; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing"; + } + + @Override + public List parameterNames() { + return ChoiceHasNoOutgoing.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fC}; + } + + @Override + public ChoiceHasNoOutgoing.Match toImmutable() { + return isMutable() ? newMatch(fC) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"c\"=" + prettyPrintValue(fC)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fC); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof ChoiceHasNoOutgoing.Match)) { + ChoiceHasNoOutgoing.Match other = (ChoiceHasNoOutgoing.Match) obj; + return Objects.equals(fC, other.fC); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public ChoiceHasNoOutgoing specification() { + return ChoiceHasNoOutgoing.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static ChoiceHasNoOutgoing.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static ChoiceHasNoOutgoing.Match newMutableMatch(final Choice pC) { + return new Mutable(pC); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the (partial) match object. + * + */ + public static ChoiceHasNoOutgoing.Match newMatch(final Choice pC) { + return new Immutable(pC); + } + + private static final class Mutable extends ChoiceHasNoOutgoing.Match { + Mutable(final Choice pC) { + super(pC); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends ChoiceHasNoOutgoing.Match { + Immutable(final Choice pC) { + super(pC); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // Choice
+   * /////////
+   * 
+   * {@literal @}Constraint(severity="error", message="error", key = {c})
+   * pattern choiceHasNoOutgoing(c : Choice) {
+   * 	neg find transition(_, c, _);
+   * }
+   * 
+ * + * @see Match + * @see ChoiceHasNoOutgoing + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static ChoiceHasNoOutgoing.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static ChoiceHasNoOutgoing.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_C = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(ChoiceHasNoOutgoing.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Choice pC) { + return rawStreamAllMatches(new Object[]{pC}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Choice pC) { + return rawStreamAllMatches(new Object[]{pC}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Choice pC) { + return rawGetOneArbitraryMatch(new Object[]{pC}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Choice pC) { + return rawHasMatch(new Object[]{pC}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Choice pC) { + return rawCountMatches(new Object[]{pC}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Choice pC, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pC}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pC the fixed value of pattern parameter c, or null if not bound. + * @return the (partial) match object. + * + */ + public ChoiceHasNoOutgoing.Match newMatch(final Choice pC) { + return ChoiceHasNoOutgoing.Match.newMatch(pC); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfc(final Object[] parameters) { + return rawStreamAllValues(POSITION_C, parameters).map(Choice.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfc() { + return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for c. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfc() { + return rawStreamAllValuesOfc(emptyArray()); + } + + @Override + protected ChoiceHasNoOutgoing.Match tupleToMatch(final Tuple t) { + try { + return ChoiceHasNoOutgoing.Match.newMatch((Choice) t.get(POSITION_C)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected ChoiceHasNoOutgoing.Match arrayToMatch(final Object[] match) { + try { + return ChoiceHasNoOutgoing.Match.newMatch((Choice) match[POSITION_C]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected ChoiceHasNoOutgoing.Match arrayToMatchMutable(final Object[] match) { + try { + return ChoiceHasNoOutgoing.Match.newMutableMatch((Choice) match[POSITION_C]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return ChoiceHasNoOutgoing.instance(); + } + } + + private ChoiceHasNoOutgoing() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static ChoiceHasNoOutgoing instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected ChoiceHasNoOutgoing.Matcher instantiate(final ViatraQueryEngine engine) { + return ChoiceHasNoOutgoing.Matcher.on(engine); + } + + @Override + public ChoiceHasNoOutgoing.Matcher instantiate() { + return ChoiceHasNoOutgoing.Matcher.create(); + } + + @Override + public ChoiceHasNoOutgoing.Match newEmptyMatch() { + return ChoiceHasNoOutgoing.Match.newEmptyMatch(); + } + + @Override + public ChoiceHasNoOutgoing.Match newMatch(final Object... parameters) { + return ChoiceHasNoOutgoing.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static ChoiceHasNoOutgoing INSTANCE = new ChoiceHasNoOutgoing(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static ChoiceHasNoOutgoing.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_c = new PParameter("c", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Choice")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_c); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("c"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_c = body.getOrCreateVariableByName("c"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Choice"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_c, parameter_c) + )); + // neg find transition(_, c, _) + new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_c, var___1_), Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("c") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // Entry
+ *         /////////
+ *         
+ *         pattern entryInRegion(r1 : Region, e1 : Entry) {
+ *         	Region.vertices(r1, e1);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class EntryInRegion extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Region fR1; + + private Entry fE1; + + private static List parameterNames = makeImmutableList("r1", "e1"); + + private Match(final Region pR1, final Entry pE1) { + this.fR1 = pR1; + this.fE1 = pE1; + } + + @Override + public Object get(final String parameterName) { + if ("r1".equals(parameterName)) return this.fR1; + if ("e1".equals(parameterName)) return this.fE1; + return null; + } + + public Region getR1() { + return this.fR1; + } + + public Entry getE1() { + return this.fE1; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("r1".equals(parameterName) ) { + this.fR1 = (Region) newValue; + return true; + } + if ("e1".equals(parameterName) ) { + this.fE1 = (Entry) newValue; + return true; + } + return false; + } + + public void setR1(final Region pR1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fR1 = pR1; + } + + public void setE1(final Entry pE1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fE1 = pE1; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion"; + } + + @Override + public List parameterNames() { + return EntryInRegion.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fR1, fE1}; + } + + @Override + public EntryInRegion.Match toImmutable() { + return isMutable() ? newMatch(fR1, fE1) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"r1\"=" + prettyPrintValue(fR1) + ", "); + result.append("\"e1\"=" + prettyPrintValue(fE1)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fR1, fE1); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof EntryInRegion.Match)) { + EntryInRegion.Match other = (EntryInRegion.Match) obj; + return Objects.equals(fR1, other.fR1) && Objects.equals(fE1, other.fE1); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public EntryInRegion specification() { + return EntryInRegion.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static EntryInRegion.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static EntryInRegion.Match newMutableMatch(final Region pR1, final Entry pE1) { + return new Mutable(pR1, pE1); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return the (partial) match object. + * + */ + public static EntryInRegion.Match newMatch(final Region pR1, final Entry pE1) { + return new Immutable(pR1, pE1); + } + + private static final class Mutable extends EntryInRegion.Match { + Mutable(final Region pR1, final Entry pE1) { + super(pR1, pE1); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends EntryInRegion.Match { + Immutable(final Region pR1, final Entry pE1) { + super(pR1, pE1); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // Entry
+   * /////////
+   * 
+   * pattern entryInRegion(r1 : Region, e1 : Entry) {
+   * 	Region.vertices(r1, e1);
+   * }
+   * 
+ * + * @see Match + * @see EntryInRegion + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static EntryInRegion.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static EntryInRegion.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_R1 = 0; + + private final static int POSITION_E1 = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(EntryInRegion.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Region pR1, final Entry pE1) { + return rawStreamAllMatches(new Object[]{pR1, pE1}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Region pR1, final Entry pE1) { + return rawStreamAllMatches(new Object[]{pR1, pE1}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Region pR1, final Entry pE1) { + return rawGetOneArbitraryMatch(new Object[]{pR1, pE1}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Region pR1, final Entry pE1) { + return rawHasMatch(new Object[]{pR1, pE1}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Region pR1, final Entry pE1) { + return rawCountMatches(new Object[]{pR1, pE1}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Region pR1, final Entry pE1, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pR1, pE1}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param pE1 the fixed value of pattern parameter e1, or null if not bound. + * @return the (partial) match object. + * + */ + public EntryInRegion.Match newMatch(final Region pR1, final Entry pE1) { + return EntryInRegion.Match.newMatch(pR1, pE1); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfr1(final Object[] parameters) { + return rawStreamAllValues(POSITION_R1, parameters).map(Region.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfr1() { + return rawStreamAllValuesOfr1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfr1() { + return rawStreamAllValuesOfr1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for r1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfr1(final EntryInRegion.Match partialMatch) { + return rawStreamAllValuesOfr1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for r1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfr1(final Entry pE1) { + return rawStreamAllValuesOfr1(new Object[]{null, pE1}); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfr1(final EntryInRegion.Match partialMatch) { + return rawStreamAllValuesOfr1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfr1(final Entry pE1) { + return rawStreamAllValuesOfr1(new Object[]{null, pE1}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfe1(final Object[] parameters) { + return rawStreamAllValues(POSITION_E1, parameters).map(Entry.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for e1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe1() { + return rawStreamAllValuesOfe1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe1() { + return rawStreamAllValuesOfe1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for e1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe1(final EntryInRegion.Match partialMatch) { + return rawStreamAllValuesOfe1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for e1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe1(final Region pR1) { + return rawStreamAllValuesOfe1(new Object[]{pR1, null}); + } + + /** + * Retrieve the set of values that occur in matches for e1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe1(final EntryInRegion.Match partialMatch) { + return rawStreamAllValuesOfe1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe1(final Region pR1) { + return rawStreamAllValuesOfe1(new Object[]{pR1, null}).collect(Collectors.toSet()); + } + + @Override + protected EntryInRegion.Match tupleToMatch(final Tuple t) { + try { + return EntryInRegion.Match.newMatch((Region) t.get(POSITION_R1), (Entry) t.get(POSITION_E1)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected EntryInRegion.Match arrayToMatch(final Object[] match) { + try { + return EntryInRegion.Match.newMatch((Region) match[POSITION_R1], (Entry) match[POSITION_E1]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected EntryInRegion.Match arrayToMatchMutable(final Object[] match) { + try { + return EntryInRegion.Match.newMutableMatch((Region) match[POSITION_R1], (Entry) match[POSITION_E1]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return EntryInRegion.instance(); + } + } + + private EntryInRegion() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static EntryInRegion instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected EntryInRegion.Matcher instantiate(final ViatraQueryEngine engine) { + return EntryInRegion.Matcher.on(engine); + } + + @Override + public EntryInRegion.Matcher instantiate() { + return EntryInRegion.Matcher.create(); + } + + @Override + public EntryInRegion.Match newEmptyMatch() { + return EntryInRegion.Match.newEmptyMatch(); + } + + @Override + public EntryInRegion.Match newMatch(final Object... parameters) { + return EntryInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static EntryInRegion INSTANCE = new EntryInRegion(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static EntryInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_r1 = new PParameter("r1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT); + + private final PParameter parameter_e1 = new PParameter("e1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_r1, parameter_e1); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("r1","e1"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_r1 = body.getOrCreateVariableByName("r1"); + PVariable var_e1 = body.getOrCreateVariableByName("e1"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_e1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_r1, parameter_r1), + new ExportedParameter(body, var_e1, parameter_e1) + )); + // Region.vertices(r1, e1) + new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_e1); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         pattern hasMultipleIncomingTrainsition(v : Synchronization) {
+ *         	find transition(_, src1, v);
+ *         	find transition(_, src2, v);
+ *         	src1 != src2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class HasMultipleIncomingTrainsition extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fV; + + private static List parameterNames = makeImmutableList("v"); + + private Match(final Synchronization pV) { + this.fV = pV; + } + + @Override + public Object get(final String parameterName) { + if ("v".equals(parameterName)) return this.fV; + return null; + } + + public Synchronization getV() { + return this.fV; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("v".equals(parameterName) ) { + this.fV = (Synchronization) newValue; + return true; + } + return false; + } + + public void setV(final Synchronization pV) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV = pV; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition"; + } + + @Override + public List parameterNames() { + return HasMultipleIncomingTrainsition.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fV}; + } + + @Override + public HasMultipleIncomingTrainsition.Match toImmutable() { + return isMutable() ? newMatch(fV) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"v\"=" + prettyPrintValue(fV)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fV); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof HasMultipleIncomingTrainsition.Match)) { + HasMultipleIncomingTrainsition.Match other = (HasMultipleIncomingTrainsition.Match) obj; + return Objects.equals(fV, other.fV); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public HasMultipleIncomingTrainsition specification() { + return HasMultipleIncomingTrainsition.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static HasMultipleIncomingTrainsition.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static HasMultipleIncomingTrainsition.Match newMutableMatch(final Synchronization pV) { + return new Mutable(pV); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public static HasMultipleIncomingTrainsition.Match newMatch(final Synchronization pV) { + return new Immutable(pV); + } + + private static final class Mutable extends HasMultipleIncomingTrainsition.Match { + Mutable(final Synchronization pV) { + super(pV); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends HasMultipleIncomingTrainsition.Match { + Immutable(final Synchronization pV) { + super(pV); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * pattern hasMultipleIncomingTrainsition(v : Synchronization) {
+   * 	find transition(_, src1, v);
+   * 	find transition(_, src2, v);
+   * 	src1 != src2;
+   * }
+   * 
+ * + * @see Match + * @see HasMultipleIncomingTrainsition + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static HasMultipleIncomingTrainsition.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static HasMultipleIncomingTrainsition.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_V = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleIncomingTrainsition.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pV) { + return rawStreamAllMatches(new Object[]{pV}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pV) { + return rawStreamAllMatches(new Object[]{pV}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pV) { + return rawGetOneArbitraryMatch(new Object[]{pV}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pV) { + return rawHasMatch(new Object[]{pV}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pV) { + return rawCountMatches(new Object[]{pV}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pV, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pV}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public HasMultipleIncomingTrainsition.Match newMatch(final Synchronization pV) { + return HasMultipleIncomingTrainsition.Match.newMatch(pV); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv(final Object[] parameters) { + return rawStreamAllValues(POSITION_V, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()); + } + + @Override + protected HasMultipleIncomingTrainsition.Match tupleToMatch(final Tuple t) { + try { + return HasMultipleIncomingTrainsition.Match.newMatch((Synchronization) t.get(POSITION_V)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleIncomingTrainsition.Match arrayToMatch(final Object[] match) { + try { + return HasMultipleIncomingTrainsition.Match.newMatch((Synchronization) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleIncomingTrainsition.Match arrayToMatchMutable(final Object[] match) { + try { + return HasMultipleIncomingTrainsition.Match.newMutableMatch((Synchronization) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return HasMultipleIncomingTrainsition.instance(); + } + } + + private HasMultipleIncomingTrainsition() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static HasMultipleIncomingTrainsition instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected HasMultipleIncomingTrainsition.Matcher instantiate(final ViatraQueryEngine engine) { + return HasMultipleIncomingTrainsition.Matcher.on(engine); + } + + @Override + public HasMultipleIncomingTrainsition.Matcher instantiate() { + return HasMultipleIncomingTrainsition.Matcher.create(); + } + + @Override + public HasMultipleIncomingTrainsition.Match newEmptyMatch() { + return HasMultipleIncomingTrainsition.Match.newEmptyMatch(); + } + + @Override + public HasMultipleIncomingTrainsition.Match newMatch(final Object... parameters) { + return HasMultipleIncomingTrainsition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static HasMultipleIncomingTrainsition INSTANCE = new HasMultipleIncomingTrainsition(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static HasMultipleIncomingTrainsition.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_v); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("v"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_v = body.getOrCreateVariableByName("v"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var_src1 = body.getOrCreateVariableByName("src1"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + PVariable var_src2 = body.getOrCreateVariableByName("src2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_v, parameter_v) + )); + // find transition(_, src1, v) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_src1, var_v), Transition.instance().getInternalQueryRepresentation()); + // find transition(_, src2, v) + new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_src2, var_v), Transition.instance().getInternalQueryRepresentation()); + // src1 != src2 + new Inequality(body, var_src1, var_src2); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         pattern hasMultipleOutgoingTrainsition(v : Synchronization) {
+ *         	find transition(_, v, trg1);
+ *         	find transition(_, v, trg2);
+ *         	trg1 != trg2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class HasMultipleOutgoingTrainsition extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fV; + + private static List parameterNames = makeImmutableList("v"); + + private Match(final Synchronization pV) { + this.fV = pV; + } + + @Override + public Object get(final String parameterName) { + if ("v".equals(parameterName)) return this.fV; + return null; + } + + public Synchronization getV() { + return this.fV; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("v".equals(parameterName) ) { + this.fV = (Synchronization) newValue; + return true; + } + return false; + } + + public void setV(final Synchronization pV) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV = pV; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition"; + } + + @Override + public List parameterNames() { + return HasMultipleOutgoingTrainsition.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fV}; + } + + @Override + public HasMultipleOutgoingTrainsition.Match toImmutable() { + return isMutable() ? newMatch(fV) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"v\"=" + prettyPrintValue(fV)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fV); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof HasMultipleOutgoingTrainsition.Match)) { + HasMultipleOutgoingTrainsition.Match other = (HasMultipleOutgoingTrainsition.Match) obj; + return Objects.equals(fV, other.fV); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public HasMultipleOutgoingTrainsition specification() { + return HasMultipleOutgoingTrainsition.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static HasMultipleOutgoingTrainsition.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static HasMultipleOutgoingTrainsition.Match newMutableMatch(final Synchronization pV) { + return new Mutable(pV); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public static HasMultipleOutgoingTrainsition.Match newMatch(final Synchronization pV) { + return new Immutable(pV); + } + + private static final class Mutable extends HasMultipleOutgoingTrainsition.Match { + Mutable(final Synchronization pV) { + super(pV); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends HasMultipleOutgoingTrainsition.Match { + Immutable(final Synchronization pV) { + super(pV); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * pattern hasMultipleOutgoingTrainsition(v : Synchronization) {
+   * 	find transition(_, v, trg1);
+   * 	find transition(_, v, trg2);
+   * 	trg1 != trg2;
+   * }
+   * 
+ * + * @see Match + * @see HasMultipleOutgoingTrainsition + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static HasMultipleOutgoingTrainsition.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static HasMultipleOutgoingTrainsition.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_V = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleOutgoingTrainsition.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pV) { + return rawStreamAllMatches(new Object[]{pV}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pV) { + return rawStreamAllMatches(new Object[]{pV}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pV) { + return rawGetOneArbitraryMatch(new Object[]{pV}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pV) { + return rawHasMatch(new Object[]{pV}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pV) { + return rawCountMatches(new Object[]{pV}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pV, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pV}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public HasMultipleOutgoingTrainsition.Match newMatch(final Synchronization pV) { + return HasMultipleOutgoingTrainsition.Match.newMatch(pV); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv(final Object[] parameters) { + return rawStreamAllValues(POSITION_V, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()); + } + + @Override + protected HasMultipleOutgoingTrainsition.Match tupleToMatch(final Tuple t) { + try { + return HasMultipleOutgoingTrainsition.Match.newMatch((Synchronization) t.get(POSITION_V)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleOutgoingTrainsition.Match arrayToMatch(final Object[] match) { + try { + return HasMultipleOutgoingTrainsition.Match.newMatch((Synchronization) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleOutgoingTrainsition.Match arrayToMatchMutable(final Object[] match) { + try { + return HasMultipleOutgoingTrainsition.Match.newMutableMatch((Synchronization) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return HasMultipleOutgoingTrainsition.instance(); + } + } + + private HasMultipleOutgoingTrainsition() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static HasMultipleOutgoingTrainsition instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected HasMultipleOutgoingTrainsition.Matcher instantiate(final ViatraQueryEngine engine) { + return HasMultipleOutgoingTrainsition.Matcher.on(engine); + } + + @Override + public HasMultipleOutgoingTrainsition.Matcher instantiate() { + return HasMultipleOutgoingTrainsition.Matcher.create(); + } + + @Override + public HasMultipleOutgoingTrainsition.Match newEmptyMatch() { + return HasMultipleOutgoingTrainsition.Match.newEmptyMatch(); + } + + @Override + public HasMultipleOutgoingTrainsition.Match newMatch(final Object... parameters) { + return HasMultipleOutgoingTrainsition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static HasMultipleOutgoingTrainsition INSTANCE = new HasMultipleOutgoingTrainsition(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static HasMultipleOutgoingTrainsition.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_v); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("v"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_v = body.getOrCreateVariableByName("v"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var_trg1 = body.getOrCreateVariableByName("trg1"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + PVariable var_trg2 = body.getOrCreateVariableByName("trg2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_v, parameter_v) + )); + // find transition(_, v, trg1) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v, var_trg1), Transition.instance().getInternalQueryRepresentation()); + // find transition(_, v, trg2) + new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_v, var_trg2), Transition.instance().getInternalQueryRepresentation()); + // trg1 != trg2 + new Inequality(body, var_trg1, var_trg2); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         pattern hasMultipleRegions(composite: CompositeElement) {
+ *         	CompositeElement.regions(composite,region1);
+ *         	CompositeElement.regions(composite,region2);
+ *         	region1 != region2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class HasMultipleRegions extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private CompositeElement fComposite; + + private static List parameterNames = makeImmutableList("composite"); + + private Match(final CompositeElement pComposite) { + this.fComposite = pComposite; + } + + @Override + public Object get(final String parameterName) { + if ("composite".equals(parameterName)) return this.fComposite; + return null; + } + + public CompositeElement getComposite() { + return this.fComposite; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("composite".equals(parameterName) ) { + this.fComposite = (CompositeElement) newValue; + return true; + } + return false; + } + + public void setComposite(final CompositeElement pComposite) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fComposite = pComposite; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions"; + } + + @Override + public List parameterNames() { + return HasMultipleRegions.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fComposite}; + } + + @Override + public HasMultipleRegions.Match toImmutable() { + return isMutable() ? newMatch(fComposite) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"composite\"=" + prettyPrintValue(fComposite)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fComposite); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof HasMultipleRegions.Match)) { + HasMultipleRegions.Match other = (HasMultipleRegions.Match) obj; + return Objects.equals(fComposite, other.fComposite); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public HasMultipleRegions specification() { + return HasMultipleRegions.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static HasMultipleRegions.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static HasMultipleRegions.Match newMutableMatch(final CompositeElement pComposite) { + return new Mutable(pComposite); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return the (partial) match object. + * + */ + public static HasMultipleRegions.Match newMatch(final CompositeElement pComposite) { + return new Immutable(pComposite); + } + + private static final class Mutable extends HasMultipleRegions.Match { + Mutable(final CompositeElement pComposite) { + super(pComposite); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends HasMultipleRegions.Match { + Immutable(final CompositeElement pComposite) { + super(pComposite); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * pattern hasMultipleRegions(composite: CompositeElement) {
+   * 	CompositeElement.regions(composite,region1);
+   * 	CompositeElement.regions(composite,region2);
+   * 	region1 != region2;
+   * }
+   * 
+ * + * @see Match + * @see HasMultipleRegions + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static HasMultipleRegions.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static HasMultipleRegions.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_COMPOSITE = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleRegions.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final CompositeElement pComposite) { + return rawStreamAllMatches(new Object[]{pComposite}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final CompositeElement pComposite) { + return rawStreamAllMatches(new Object[]{pComposite}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final CompositeElement pComposite) { + return rawGetOneArbitraryMatch(new Object[]{pComposite}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final CompositeElement pComposite) { + return rawHasMatch(new Object[]{pComposite}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final CompositeElement pComposite) { + return rawCountMatches(new Object[]{pComposite}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final CompositeElement pComposite, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pComposite}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pComposite the fixed value of pattern parameter composite, or null if not bound. + * @return the (partial) match object. + * + */ + public HasMultipleRegions.Match newMatch(final CompositeElement pComposite) { + return HasMultipleRegions.Match.newMatch(pComposite); + } + + /** + * Retrieve the set of values that occur in matches for composite. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfcomposite(final Object[] parameters) { + return rawStreamAllValues(POSITION_COMPOSITE, parameters).map(CompositeElement.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for composite. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfcomposite() { + return rawStreamAllValuesOfcomposite(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for composite. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfcomposite() { + return rawStreamAllValuesOfcomposite(emptyArray()); + } + + @Override + protected HasMultipleRegions.Match tupleToMatch(final Tuple t) { + try { + return HasMultipleRegions.Match.newMatch((CompositeElement) t.get(POSITION_COMPOSITE)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleRegions.Match arrayToMatch(final Object[] match) { + try { + return HasMultipleRegions.Match.newMatch((CompositeElement) match[POSITION_COMPOSITE]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected HasMultipleRegions.Match arrayToMatchMutable(final Object[] match) { + try { + return HasMultipleRegions.Match.newMutableMatch((CompositeElement) match[POSITION_COMPOSITE]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return HasMultipleRegions.instance(); + } + } + + private HasMultipleRegions() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static HasMultipleRegions instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected HasMultipleRegions.Matcher instantiate(final ViatraQueryEngine engine) { + return HasMultipleRegions.Matcher.on(engine); + } + + @Override + public HasMultipleRegions.Matcher instantiate() { + return HasMultipleRegions.Matcher.create(); + } + + @Override + public HasMultipleRegions.Match newEmptyMatch() { + return HasMultipleRegions.Match.newEmptyMatch(); + } + + @Override + public HasMultipleRegions.Match newMatch(final Object... parameters) { + return HasMultipleRegions.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static HasMultipleRegions INSTANCE = new HasMultipleRegions(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static HasMultipleRegions.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_composite = new PParameter("composite", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "CompositeElement")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_composite); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("composite"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_composite = body.getOrCreateVariableByName("composite"); + PVariable var_region1 = body.getOrCreateVariableByName("region1"); + PVariable var_region2 = body.getOrCreateVariableByName("region2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_composite, parameter_composite) + )); + // CompositeElement.regions(composite,region1) + new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_composite, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + new Equality(body, var__virtual_0_, var_region1); + // CompositeElement.regions(composite,region2) + new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_composite, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + new Equality(body, var__virtual_1_, var_region2); + // region1 != region2 + new Inequality(body, var_region1, var_region2); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {e})
+ *         pattern incomingToEntry(t : Transition, e : Entry) {
+ *         	find transition(t, _, e);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class IncomingToEntry extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Transition fT; + + private Entry fE; + + private static List parameterNames = makeImmutableList("t", "e"); + + private Match(final Transition pT, final Entry pE) { + this.fT = pT; + this.fE = pE; + } + + @Override + public Object get(final String parameterName) { + if ("t".equals(parameterName)) return this.fT; + if ("e".equals(parameterName)) return this.fE; + return null; + } + + public Transition getT() { + return this.fT; + } + + public Entry getE() { + return this.fE; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("t".equals(parameterName) ) { + this.fT = (Transition) newValue; + return true; + } + if ("e".equals(parameterName) ) { + this.fE = (Entry) newValue; + return true; + } + return false; + } + + public void setT(final Transition pT) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT = pT; + } + + public void setE(final Entry pE) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fE = pE; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry"; + } + + @Override + public List parameterNames() { + return IncomingToEntry.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fT, fE}; + } + + @Override + public IncomingToEntry.Match toImmutable() { + return isMutable() ? newMatch(fT, fE) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"t\"=" + prettyPrintValue(fT) + ", "); + result.append("\"e\"=" + prettyPrintValue(fE)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fT, fE); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof IncomingToEntry.Match)) { + IncomingToEntry.Match other = (IncomingToEntry.Match) obj; + return Objects.equals(fT, other.fT) && Objects.equals(fE, other.fE); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public IncomingToEntry specification() { + return IncomingToEntry.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static IncomingToEntry.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static IncomingToEntry.Match newMutableMatch(final Transition pT, final Entry pE) { + return new Mutable(pT, pE); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public static IncomingToEntry.Match newMatch(final Transition pT, final Entry pE) { + return new Immutable(pT, pE); + } + + private static final class Mutable extends IncomingToEntry.Match { + Mutable(final Transition pT, final Entry pE) { + super(pT, pE); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends IncomingToEntry.Match { + Immutable(final Transition pT, final Entry pE) { + super(pT, pE); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {e})
+   * pattern incomingToEntry(t : Transition, e : Entry) {
+   * 	find transition(t, _, e);
+   * }
+   * 
+ * + * @see Match + * @see IncomingToEntry + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static IncomingToEntry.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static IncomingToEntry.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_T = 0; + + private final static int POSITION_E = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(IncomingToEntry.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Transition pT, final Entry pE) { + return rawStreamAllMatches(new Object[]{pT, pE}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Transition pT, final Entry pE) { + return rawStreamAllMatches(new Object[]{pT, pE}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Transition pT, final Entry pE) { + return rawGetOneArbitraryMatch(new Object[]{pT, pE}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Transition pT, final Entry pE) { + return rawHasMatch(new Object[]{pT, pE}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Transition pT, final Entry pE) { + return rawCountMatches(new Object[]{pT, pE}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Transition pT, final Entry pE, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pT, pE}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public IncomingToEntry.Match newMatch(final Transition pT, final Entry pE) { + return IncomingToEntry.Match.newMatch(pT, pE); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft(final Object[] parameters) { + return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final IncomingToEntry.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final Entry pE) { + return rawStreamAllValuesOft(new Object[]{null, pE}); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final IncomingToEntry.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final Entry pE) { + return rawStreamAllValuesOft(new Object[]{null, pE}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfe(final Object[] parameters) { + return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final IncomingToEntry.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final Transition pT) { + return rawStreamAllValuesOfe(new Object[]{pT, null}); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final IncomingToEntry.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final Transition pT) { + return rawStreamAllValuesOfe(new Object[]{pT, null}).collect(Collectors.toSet()); + } + + @Override + protected IncomingToEntry.Match tupleToMatch(final Tuple t) { + try { + return IncomingToEntry.Match.newMatch((Transition) t.get(POSITION_T), (Entry) t.get(POSITION_E)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected IncomingToEntry.Match arrayToMatch(final Object[] match) { + try { + return IncomingToEntry.Match.newMatch((Transition) match[POSITION_T], (Entry) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected IncomingToEntry.Match arrayToMatchMutable(final Object[] match) { + try { + return IncomingToEntry.Match.newMutableMatch((Transition) match[POSITION_T], (Entry) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return IncomingToEntry.instance(); + } + } + + private IncomingToEntry() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IncomingToEntry instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected IncomingToEntry.Matcher instantiate(final ViatraQueryEngine engine) { + return IncomingToEntry.Matcher.on(engine); + } + + @Override + public IncomingToEntry.Matcher instantiate() { + return IncomingToEntry.Matcher.create(); + } + + @Override + public IncomingToEntry.Match newEmptyMatch() { + return IncomingToEntry.Match.newEmptyMatch(); + } + + @Override + public IncomingToEntry.Match newMatch(final Object... parameters) { + return IncomingToEntry.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static IncomingToEntry INSTANCE = new IncomingToEntry(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static IncomingToEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_t, parameter_e); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("t","e"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_t = body.getOrCreateVariableByName("t"); + PVariable var_e = body.getOrCreateVariableByName("e"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_t, parameter_t), + new ExportedParameter(body, var_e, parameter_e) + )); + // find transition(t, _, e) + new PositivePatternCall(body, Tuples.flatTupleOf(var_t, var___0_, var_e), ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("e") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {e})
+ *         pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) {
+ *         	Entry.outgoingTransitions(e,t1);
+ *         	Entry.outgoingTransitions(e,t2);
+ *         	t1!=t2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class MultipleTransitionFromEntry extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Entry fE; + + private Transition fT1; + + private Transition fT2; + + private static List parameterNames = makeImmutableList("e", "t1", "t2"); + + private Match(final Entry pE, final Transition pT1, final Transition pT2) { + this.fE = pE; + this.fT1 = pT1; + this.fT2 = pT2; + } + + @Override + public Object get(final String parameterName) { + if ("e".equals(parameterName)) return this.fE; + if ("t1".equals(parameterName)) return this.fT1; + if ("t2".equals(parameterName)) return this.fT2; + return null; + } + + public Entry getE() { + return this.fE; + } + + public Transition getT1() { + return this.fT1; + } + + public Transition getT2() { + return this.fT2; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("e".equals(parameterName) ) { + this.fE = (Entry) newValue; + return true; + } + if ("t1".equals(parameterName) ) { + this.fT1 = (Transition) newValue; + return true; + } + if ("t2".equals(parameterName) ) { + this.fT2 = (Transition) newValue; + return true; + } + return false; + } + + public void setE(final Entry pE) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fE = pE; + } + + public void setT1(final Transition pT1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT1 = pT1; + } + + public void setT2(final Transition pT2) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT2 = pT2; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry"; + } + + @Override + public List parameterNames() { + return MultipleTransitionFromEntry.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fE, fT1, fT2}; + } + + @Override + public MultipleTransitionFromEntry.Match toImmutable() { + return isMutable() ? newMatch(fE, fT1, fT2) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"e\"=" + prettyPrintValue(fE) + ", "); + result.append("\"t1\"=" + prettyPrintValue(fT1) + ", "); + result.append("\"t2\"=" + prettyPrintValue(fT2)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fE, fT1, fT2); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof MultipleTransitionFromEntry.Match)) { + MultipleTransitionFromEntry.Match other = (MultipleTransitionFromEntry.Match) obj; + return Objects.equals(fE, other.fE) && Objects.equals(fT1, other.fT1) && Objects.equals(fT2, other.fT2); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public MultipleTransitionFromEntry specification() { + return MultipleTransitionFromEntry.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static MultipleTransitionFromEntry.Match newEmptyMatch() { + return new Mutable(null, null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static MultipleTransitionFromEntry.Match newMutableMatch(final Entry pE, final Transition pT1, final Transition pT2) { + return new Mutable(pE, pT1, pT2); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return the (partial) match object. + * + */ + public static MultipleTransitionFromEntry.Match newMatch(final Entry pE, final Transition pT1, final Transition pT2) { + return new Immutable(pE, pT1, pT2); + } + + private static final class Mutable extends MultipleTransitionFromEntry.Match { + Mutable(final Entry pE, final Transition pT1, final Transition pT2) { + super(pE, pT1, pT2); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends MultipleTransitionFromEntry.Match { + Immutable(final Entry pE, final Transition pT1, final Transition pT2) { + super(pE, pT1, pT2); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {e})
+   * pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) {
+   * 	Entry.outgoingTransitions(e,t1);
+   * 	Entry.outgoingTransitions(e,t2);
+   * 	t1!=t2;
+   * }
+   * 
+ * + * @see Match + * @see MultipleTransitionFromEntry + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static MultipleTransitionFromEntry.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static MultipleTransitionFromEntry.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_E = 0; + + private final static int POSITION_T1 = 1; + + private final static int POSITION_T2 = 2; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(MultipleTransitionFromEntry.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Entry pE, final Transition pT1, final Transition pT2) { + return rawStreamAllMatches(new Object[]{pE, pT1, pT2}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Entry pE, final Transition pT1, final Transition pT2) { + return rawStreamAllMatches(new Object[]{pE, pT1, pT2}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Entry pE, final Transition pT1, final Transition pT2) { + return rawGetOneArbitraryMatch(new Object[]{pE, pT1, pT2}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Entry pE, final Transition pT1, final Transition pT2) { + return rawHasMatch(new Object[]{pE, pT1, pT2}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Entry pE, final Transition pT1, final Transition pT2) { + return rawCountMatches(new Object[]{pE, pT1, pT2}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Entry pE, final Transition pT1, final Transition pT2, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pE, pT1, pT2}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param pT1 the fixed value of pattern parameter t1, or null if not bound. + * @param pT2 the fixed value of pattern parameter t2, or null if not bound. + * @return the (partial) match object. + * + */ + public MultipleTransitionFromEntry.Match newMatch(final Entry pE, final Transition pT1, final Transition pT2) { + return MultipleTransitionFromEntry.Match.newMatch(pE, pT1, pT2); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfe(final Object[] parameters) { + return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final Transition pT1, final Transition pT2) { + return rawStreamAllValuesOfe(new Object[]{null, pT1, pT2}); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final Transition pT1, final Transition pT2) { + return rawStreamAllValuesOfe(new Object[]{null, pT1, pT2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft1(final Object[] parameters) { + return rawStreamAllValues(POSITION_T1, parameters).map(Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft1() { + return rawStreamAllValuesOft1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft1() { + return rawStreamAllValuesOft1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft1(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOft1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft1(final Entry pE, final Transition pT2) { + return rawStreamAllValuesOft1(new Object[]{pE, null, pT2}); + } + + /** + * Retrieve the set of values that occur in matches for t1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft1(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOft1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft1(final Entry pE, final Transition pT2) { + return rawStreamAllValuesOft1(new Object[]{pE, null, pT2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t2. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft2(final Object[] parameters) { + return rawStreamAllValues(POSITION_T2, parameters).map(Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft2() { + return rawStreamAllValuesOft2(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft2() { + return rawStreamAllValuesOft2(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft2(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOft2(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft2(final Entry pE, final Transition pT1) { + return rawStreamAllValuesOft2(new Object[]{pE, pT1, null}); + } + + /** + * Retrieve the set of values that occur in matches for t2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft2(final MultipleTransitionFromEntry.Match partialMatch) { + return rawStreamAllValuesOft2(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft2(final Entry pE, final Transition pT1) { + return rawStreamAllValuesOft2(new Object[]{pE, pT1, null}).collect(Collectors.toSet()); + } + + @Override + protected MultipleTransitionFromEntry.Match tupleToMatch(final Tuple t) { + try { + return MultipleTransitionFromEntry.Match.newMatch((Entry) t.get(POSITION_E), (Transition) t.get(POSITION_T1), (Transition) t.get(POSITION_T2)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected MultipleTransitionFromEntry.Match arrayToMatch(final Object[] match) { + try { + return MultipleTransitionFromEntry.Match.newMatch((Entry) match[POSITION_E], (Transition) match[POSITION_T1], (Transition) match[POSITION_T2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected MultipleTransitionFromEntry.Match arrayToMatchMutable(final Object[] match) { + try { + return MultipleTransitionFromEntry.Match.newMutableMatch((Entry) match[POSITION_E], (Transition) match[POSITION_T1], (Transition) match[POSITION_T2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return MultipleTransitionFromEntry.instance(); + } + } + + private MultipleTransitionFromEntry() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static MultipleTransitionFromEntry instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected MultipleTransitionFromEntry.Matcher instantiate(final ViatraQueryEngine engine) { + return MultipleTransitionFromEntry.Matcher.on(engine); + } + + @Override + public MultipleTransitionFromEntry.Matcher instantiate() { + return MultipleTransitionFromEntry.Matcher.create(); + } + + @Override + public MultipleTransitionFromEntry.Match newEmptyMatch() { + return MultipleTransitionFromEntry.Match.newEmptyMatch(); + } + + @Override + public MultipleTransitionFromEntry.Match newMatch(final Object... parameters) { + 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]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static MultipleTransitionFromEntry INSTANCE = new MultipleTransitionFromEntry(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static MultipleTransitionFromEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT); + + private final PParameter parameter_t1 = new PParameter("t1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final PParameter parameter_t2 = new PParameter("t2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_e, parameter_t1, parameter_t2); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("e","t1","t2"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_e = body.getOrCreateVariableByName("e"); + PVariable var_t1 = body.getOrCreateVariableByName("t1"); + PVariable var_t2 = body.getOrCreateVariableByName("t2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_e, parameter_e), + new ExportedParameter(body, var_t1, parameter_t1), + new ExportedParameter(body, var_t2, parameter_t2) + )); + // Entry.outgoingTransitions(e,t1) + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new Equality(body, var__virtual_0_, var_t1); + // Entry.outgoingTransitions(e,t2) + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new Equality(body, var__virtual_1_, var_t2); + // t1!=t2 + new Inequality(body, var_t1, var_t2); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("e") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {r1})
+ *         pattern noEntryInRegion(r1 : Region) {
+ *         	neg find entryInRegion(r1, _);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class NoEntryInRegion extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Region fR1; + + private static List parameterNames = makeImmutableList("r1"); + + private Match(final Region pR1) { + this.fR1 = pR1; + } + + @Override + public Object get(final String parameterName) { + if ("r1".equals(parameterName)) return this.fR1; + return null; + } + + public Region getR1() { + return this.fR1; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("r1".equals(parameterName) ) { + this.fR1 = (Region) newValue; + return true; + } + return false; + } + + public void setR1(final Region pR1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fR1 = pR1; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion"; + } + + @Override + public List parameterNames() { + return NoEntryInRegion.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fR1}; + } + + @Override + public NoEntryInRegion.Match toImmutable() { + return isMutable() ? newMatch(fR1) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"r1\"=" + prettyPrintValue(fR1)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fR1); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof NoEntryInRegion.Match)) { + NoEntryInRegion.Match other = (NoEntryInRegion.Match) obj; + return Objects.equals(fR1, other.fR1); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public NoEntryInRegion specification() { + return NoEntryInRegion.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static NoEntryInRegion.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static NoEntryInRegion.Match newMutableMatch(final Region pR1) { + return new Mutable(pR1); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return the (partial) match object. + * + */ + public static NoEntryInRegion.Match newMatch(final Region pR1) { + return new Immutable(pR1); + } + + private static final class Mutable extends NoEntryInRegion.Match { + Mutable(final Region pR1) { + super(pR1); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends NoEntryInRegion.Match { + Immutable(final Region pR1) { + super(pR1); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {r1})
+   * pattern noEntryInRegion(r1 : Region) {
+   * 	neg find entryInRegion(r1, _);
+   * }
+   * 
+ * + * @see Match + * @see NoEntryInRegion + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static NoEntryInRegion.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static NoEntryInRegion.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_R1 = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoEntryInRegion.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Region pR1) { + return rawStreamAllMatches(new Object[]{pR1}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Region pR1) { + return rawStreamAllMatches(new Object[]{pR1}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Region pR1) { + return rawGetOneArbitraryMatch(new Object[]{pR1}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Region pR1) { + return rawHasMatch(new Object[]{pR1}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Region pR1) { + return rawCountMatches(new Object[]{pR1}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Region pR1, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pR1}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pR1 the fixed value of pattern parameter r1, or null if not bound. + * @return the (partial) match object. + * + */ + public NoEntryInRegion.Match newMatch(final Region pR1) { + return NoEntryInRegion.Match.newMatch(pR1); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfr1(final Object[] parameters) { + return rawStreamAllValues(POSITION_R1, parameters).map(Region.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfr1() { + return rawStreamAllValuesOfr1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for r1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfr1() { + return rawStreamAllValuesOfr1(emptyArray()); + } + + @Override + protected NoEntryInRegion.Match tupleToMatch(final Tuple t) { + try { + return NoEntryInRegion.Match.newMatch((Region) t.get(POSITION_R1)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected NoEntryInRegion.Match arrayToMatch(final Object[] match) { + try { + return NoEntryInRegion.Match.newMatch((Region) match[POSITION_R1]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected NoEntryInRegion.Match arrayToMatchMutable(final Object[] match) { + try { + return NoEntryInRegion.Match.newMutableMatch((Region) match[POSITION_R1]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return NoEntryInRegion.instance(); + } + } + + private NoEntryInRegion() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static NoEntryInRegion instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected NoEntryInRegion.Matcher instantiate(final ViatraQueryEngine engine) { + return NoEntryInRegion.Matcher.on(engine); + } + + @Override + public NoEntryInRegion.Matcher instantiate() { + return NoEntryInRegion.Matcher.create(); + } + + @Override + public NoEntryInRegion.Match newEmptyMatch() { + return NoEntryInRegion.Match.newEmptyMatch(); + } + + @Override + public NoEntryInRegion.Match newMatch(final Object... parameters) { + return NoEntryInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static NoEntryInRegion INSTANCE = new NoEntryInRegion(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static NoEntryInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_r1 = new PParameter("r1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_r1); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("r1"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_r1 = body.getOrCreateVariableByName("r1"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_r1, parameter_r1) + )); + // neg find entryInRegion(r1, _) + new NegativePatternCall(body, Tuples.flatTupleOf(var_r1, var___0_), EntryInRegion.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("r1") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {e})
+ *         pattern noOutgoingTransitionFromEntry(e : Entry) {
+ *         	neg find transition(_, e, _);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class NoOutgoingTransitionFromEntry extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Entry fE; + + private static List parameterNames = makeImmutableList("e"); + + private Match(final Entry pE) { + this.fE = pE; + } + + @Override + public Object get(final String parameterName) { + if ("e".equals(parameterName)) return this.fE; + return null; + } + + public Entry getE() { + return this.fE; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("e".equals(parameterName) ) { + this.fE = (Entry) newValue; + return true; + } + return false; + } + + public void setE(final Entry pE) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fE = pE; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry"; + } + + @Override + public List parameterNames() { + return NoOutgoingTransitionFromEntry.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fE}; + } + + @Override + public NoOutgoingTransitionFromEntry.Match toImmutable() { + return isMutable() ? newMatch(fE) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"e\"=" + prettyPrintValue(fE)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fE); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof NoOutgoingTransitionFromEntry.Match)) { + NoOutgoingTransitionFromEntry.Match other = (NoOutgoingTransitionFromEntry.Match) obj; + return Objects.equals(fE, other.fE); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public NoOutgoingTransitionFromEntry specification() { + return NoOutgoingTransitionFromEntry.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static NoOutgoingTransitionFromEntry.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static NoOutgoingTransitionFromEntry.Match newMutableMatch(final Entry pE) { + return new Mutable(pE); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public static NoOutgoingTransitionFromEntry.Match newMatch(final Entry pE) { + return new Immutable(pE); + } + + private static final class Mutable extends NoOutgoingTransitionFromEntry.Match { + Mutable(final Entry pE) { + super(pE); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends NoOutgoingTransitionFromEntry.Match { + Immutable(final Entry pE) { + super(pE); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {e})
+   * pattern noOutgoingTransitionFromEntry(e : Entry) {
+   * 	neg find transition(_, e, _);
+   * }
+   * 
+ * + * @see Match + * @see NoOutgoingTransitionFromEntry + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static NoOutgoingTransitionFromEntry.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static NoOutgoingTransitionFromEntry.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_E = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoOutgoingTransitionFromEntry.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Entry pE) { + return rawStreamAllMatches(new Object[]{pE}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Entry pE) { + return rawStreamAllMatches(new Object[]{pE}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Entry pE) { + return rawGetOneArbitraryMatch(new Object[]{pE}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Entry pE) { + return rawHasMatch(new Object[]{pE}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Entry pE) { + return rawCountMatches(new Object[]{pE}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Entry pE, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pE}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public NoOutgoingTransitionFromEntry.Match newMatch(final Entry pE) { + return NoOutgoingTransitionFromEntry.Match.newMatch(pE); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfe(final Object[] parameters) { + return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()); + } + + @Override + protected NoOutgoingTransitionFromEntry.Match tupleToMatch(final Tuple t) { + try { + return NoOutgoingTransitionFromEntry.Match.newMatch((Entry) t.get(POSITION_E)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected NoOutgoingTransitionFromEntry.Match arrayToMatch(final Object[] match) { + try { + return NoOutgoingTransitionFromEntry.Match.newMatch((Entry) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected NoOutgoingTransitionFromEntry.Match arrayToMatchMutable(final Object[] match) { + try { + return NoOutgoingTransitionFromEntry.Match.newMutableMatch((Entry) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return NoOutgoingTransitionFromEntry.instance(); + } + } + + private NoOutgoingTransitionFromEntry() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static NoOutgoingTransitionFromEntry instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected NoOutgoingTransitionFromEntry.Matcher instantiate(final ViatraQueryEngine engine) { + return NoOutgoingTransitionFromEntry.Matcher.on(engine); + } + + @Override + public NoOutgoingTransitionFromEntry.Matcher instantiate() { + return NoOutgoingTransitionFromEntry.Matcher.create(); + } + + @Override + public NoOutgoingTransitionFromEntry.Match newEmptyMatch() { + return NoOutgoingTransitionFromEntry.Match.newEmptyMatch(); + } + + @Override + public NoOutgoingTransitionFromEntry.Match newMatch(final Object... parameters) { + return NoOutgoingTransitionFromEntry.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static NoOutgoingTransitionFromEntry INSTANCE = new NoOutgoingTransitionFromEntry(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static NoOutgoingTransitionFromEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_e); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("e"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_e = body.getOrCreateVariableByName("e"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_e, parameter_e) + )); + // neg find transition(_, e, _) + new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_e, var___1_), Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("e") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // State vs Region
+ *         /////////
+ *         
+ *         {@literal @}Constraint(severity="error", message="error", key = {region})
+ *         pattern noStateInRegion(region: Region) {
+ *         	neg find StateInRegion(region,_);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class NoStateInRegion extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Region fRegion; + + private static List parameterNames = makeImmutableList("region"); + + private Match(final Region pRegion) { + this.fRegion = pRegion; + } + + @Override + public Object get(final String parameterName) { + if ("region".equals(parameterName)) return this.fRegion; + return null; + } + + public Region getRegion() { + return this.fRegion; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("region".equals(parameterName) ) { + this.fRegion = (Region) newValue; + return true; + } + return false; + } + + public void setRegion(final Region pRegion) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fRegion = pRegion; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion"; + } + + @Override + public List parameterNames() { + return NoStateInRegion.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fRegion}; + } + + @Override + public NoStateInRegion.Match toImmutable() { + return isMutable() ? newMatch(fRegion) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"region\"=" + prettyPrintValue(fRegion)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fRegion); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof NoStateInRegion.Match)) { + NoStateInRegion.Match other = (NoStateInRegion.Match) obj; + return Objects.equals(fRegion, other.fRegion); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public NoStateInRegion specification() { + return NoStateInRegion.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static NoStateInRegion.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static NoStateInRegion.Match newMutableMatch(final Region pRegion) { + return new Mutable(pRegion); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return the (partial) match object. + * + */ + public static NoStateInRegion.Match newMatch(final Region pRegion) { + return new Immutable(pRegion); + } + + private static final class Mutable extends NoStateInRegion.Match { + Mutable(final Region pRegion) { + super(pRegion); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends NoStateInRegion.Match { + Immutable(final Region pRegion) { + super(pRegion); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // State vs Region
+   * /////////
+   * 
+   * {@literal @}Constraint(severity="error", message="error", key = {region})
+   * pattern noStateInRegion(region: Region) {
+   * 	neg find StateInRegion(region,_);
+   * }
+   * 
+ * + * @see Match + * @see NoStateInRegion + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static NoStateInRegion.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static NoStateInRegion.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_REGION = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoStateInRegion.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Region pRegion) { + return rawStreamAllMatches(new Object[]{pRegion}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Region pRegion) { + return rawStreamAllMatches(new Object[]{pRegion}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Region pRegion) { + return rawGetOneArbitraryMatch(new Object[]{pRegion}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Region pRegion) { + return rawHasMatch(new Object[]{pRegion}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Region pRegion) { + return rawCountMatches(new Object[]{pRegion}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Region pRegion, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pRegion}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @return the (partial) match object. + * + */ + public NoStateInRegion.Match newMatch(final Region pRegion) { + return NoStateInRegion.Match.newMatch(pRegion); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfregion(final Object[] parameters) { + return rawStreamAllValues(POSITION_REGION, parameters).map(Region.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfregion() { + return rawStreamAllValuesOfregion(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfregion() { + return rawStreamAllValuesOfregion(emptyArray()); + } + + @Override + protected NoStateInRegion.Match tupleToMatch(final Tuple t) { + try { + return NoStateInRegion.Match.newMatch((Region) t.get(POSITION_REGION)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected NoStateInRegion.Match arrayToMatch(final Object[] match) { + try { + return NoStateInRegion.Match.newMatch((Region) match[POSITION_REGION]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected NoStateInRegion.Match arrayToMatchMutable(final Object[] match) { + try { + return NoStateInRegion.Match.newMutableMatch((Region) match[POSITION_REGION]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return NoStateInRegion.instance(); + } + } + + private NoStateInRegion() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static NoStateInRegion instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected NoStateInRegion.Matcher instantiate(final ViatraQueryEngine engine) { + return NoStateInRegion.Matcher.on(engine); + } + + @Override + public NoStateInRegion.Matcher instantiate() { + return NoStateInRegion.Matcher.create(); + } + + @Override + public NoStateInRegion.Match newEmptyMatch() { + return NoStateInRegion.Match.newEmptyMatch(); + } + + @Override + public NoStateInRegion.Match newMatch(final Object... parameters) { + return NoStateInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static NoStateInRegion INSTANCE = new NoStateInRegion(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static NoStateInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_region = new PParameter("region", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_region); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("region"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_region = body.getOrCreateVariableByName("region"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_region, parameter_region) + )); + // neg find StateInRegion(region,_) + new NegativePatternCall(body, Tuples.flatTupleOf(var_region, var___0_), StateInRegion.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("region") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern notSynchronizingStates(s : Synchronization) {
+ *         	neg find hasMultipleOutgoingTrainsition(s);
+ *         	neg find hasMultipleIncomingTrainsition(s);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class NotSynchronizingStates extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private static List parameterNames = makeImmutableList("s"); + + private Match(final Synchronization pS) { + this.fS = pS; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates"; + } + + @Override + public List parameterNames() { + return NotSynchronizingStates.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS}; + } + + @Override + public NotSynchronizingStates.Match toImmutable() { + return isMutable() ? newMatch(fS) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof NotSynchronizingStates.Match)) { + NotSynchronizingStates.Match other = (NotSynchronizingStates.Match) obj; + return Objects.equals(fS, other.fS); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public NotSynchronizingStates specification() { + return NotSynchronizingStates.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static NotSynchronizingStates.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static NotSynchronizingStates.Match newMutableMatch(final Synchronization pS) { + return new Mutable(pS); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public static NotSynchronizingStates.Match newMatch(final Synchronization pS) { + return new Immutable(pS); + } + + private static final class Mutable extends NotSynchronizingStates.Match { + Mutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends NotSynchronizingStates.Match { + Immutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern notSynchronizingStates(s : Synchronization) {
+   * 	neg find hasMultipleOutgoingTrainsition(s);
+   * 	neg find hasMultipleIncomingTrainsition(s);
+   * }
+   * 
+ * + * @see Match + * @see NotSynchronizingStates + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static NotSynchronizingStates.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static NotSynchronizingStates.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NotSynchronizingStates.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS) { + return rawGetOneArbitraryMatch(new Object[]{pS}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS) { + return rawHasMatch(new Object[]{pS}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS) { + return rawCountMatches(new Object[]{pS}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public NotSynchronizingStates.Match newMatch(final Synchronization pS) { + return NotSynchronizingStates.Match.newMatch(pS); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + @Override + protected NotSynchronizingStates.Match tupleToMatch(final Tuple t) { + try { + return NotSynchronizingStates.Match.newMatch((Synchronization) t.get(POSITION_S)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected NotSynchronizingStates.Match arrayToMatch(final Object[] match) { + try { + return NotSynchronizingStates.Match.newMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected NotSynchronizingStates.Match arrayToMatchMutable(final Object[] match) { + try { + return NotSynchronizingStates.Match.newMutableMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return NotSynchronizingStates.instance(); + } + } + + private NotSynchronizingStates() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static NotSynchronizingStates instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected NotSynchronizingStates.Matcher instantiate(final ViatraQueryEngine engine) { + return NotSynchronizingStates.Matcher.on(engine); + } + + @Override + public NotSynchronizingStates.Matcher instantiate() { + return NotSynchronizingStates.Matcher.create(); + } + + @Override + public NotSynchronizingStates.Match newEmptyMatch() { + return NotSynchronizingStates.Match.newEmptyMatch(); + } + + @Override + public NotSynchronizingStates.Match newMatch(final Object... parameters) { + return NotSynchronizingStates.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static NotSynchronizingStates INSTANCE = new NotSynchronizingStates(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static NotSynchronizingStates.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s) + )); + // neg find hasMultipleOutgoingTrainsition(s) + new NegativePatternCall(body, Tuples.flatTupleOf(var_s), HasMultipleOutgoingTrainsition.instance().getInternalQueryRepresentation()); + // neg find hasMultipleIncomingTrainsition(s) + new NegativePatternCall(body, Tuples.flatTupleOf(var_s), HasMultipleIncomingTrainsition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // Exit
+ *         /////////
+ *         
+ *         {@literal @}Constraint(severity="error", message="error", key = {e})
+ *         pattern outgoingFromExit(t : Transition, e : Exit) {
+ *         	Exit.outgoingTransitions(e,t);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class OutgoingFromExit extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Transition fT; + + private Exit fE; + + private static List parameterNames = makeImmutableList("t", "e"); + + private Match(final Transition pT, final Exit pE) { + this.fT = pT; + this.fE = pE; + } + + @Override + public Object get(final String parameterName) { + if ("t".equals(parameterName)) return this.fT; + if ("e".equals(parameterName)) return this.fE; + return null; + } + + public Transition getT() { + return this.fT; + } + + public Exit getE() { + return this.fE; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("t".equals(parameterName) ) { + this.fT = (Transition) newValue; + return true; + } + if ("e".equals(parameterName) ) { + this.fE = (Exit) newValue; + return true; + } + return false; + } + + public void setT(final Transition pT) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT = pT; + } + + public void setE(final Exit pE) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fE = pE; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit"; + } + + @Override + public List parameterNames() { + return OutgoingFromExit.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fT, fE}; + } + + @Override + public OutgoingFromExit.Match toImmutable() { + return isMutable() ? newMatch(fT, fE) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"t\"=" + prettyPrintValue(fT) + ", "); + result.append("\"e\"=" + prettyPrintValue(fE)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fT, fE); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof OutgoingFromExit.Match)) { + OutgoingFromExit.Match other = (OutgoingFromExit.Match) obj; + return Objects.equals(fT, other.fT) && Objects.equals(fE, other.fE); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public OutgoingFromExit specification() { + return OutgoingFromExit.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static OutgoingFromExit.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static OutgoingFromExit.Match newMutableMatch(final Transition pT, final Exit pE) { + return new Mutable(pT, pE); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public static OutgoingFromExit.Match newMatch(final Transition pT, final Exit pE) { + return new Immutable(pT, pE); + } + + private static final class Mutable extends OutgoingFromExit.Match { + Mutable(final Transition pT, final Exit pE) { + super(pT, pE); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends OutgoingFromExit.Match { + Immutable(final Transition pT, final Exit pE) { + super(pT, pE); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // Exit
+   * /////////
+   * 
+   * {@literal @}Constraint(severity="error", message="error", key = {e})
+   * pattern outgoingFromExit(t : Transition, e : Exit) {
+   * 	Exit.outgoingTransitions(e,t);
+   * }
+   * 
+ * + * @see Match + * @see OutgoingFromExit + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static OutgoingFromExit.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static OutgoingFromExit.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_T = 0; + + private final static int POSITION_E = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OutgoingFromExit.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Transition pT, final Exit pE) { + return rawStreamAllMatches(new Object[]{pT, pE}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Transition pT, final Exit pE) { + return rawStreamAllMatches(new Object[]{pT, pE}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Transition pT, final Exit pE) { + return rawGetOneArbitraryMatch(new Object[]{pT, pE}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Transition pT, final Exit pE) { + return rawHasMatch(new Object[]{pT, pE}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Transition pT, final Exit pE) { + return rawCountMatches(new Object[]{pT, pE}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Transition pT, final Exit pE, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pT, pE}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pE the fixed value of pattern parameter e, or null if not bound. + * @return the (partial) match object. + * + */ + public OutgoingFromExit.Match newMatch(final Transition pT, final Exit pE) { + return OutgoingFromExit.Match.newMatch(pT, pE); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft(final Object[] parameters) { + return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final OutgoingFromExit.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final Exit pE) { + return rawStreamAllValuesOft(new Object[]{null, pE}); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final OutgoingFromExit.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final Exit pE) { + return rawStreamAllValuesOft(new Object[]{null, pE}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfe(final Object[] parameters) { + return rawStreamAllValues(POSITION_E, parameters).map(Exit.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe() { + return rawStreamAllValuesOfe(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final OutgoingFromExit.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for e. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfe(final Transition pT) { + return rawStreamAllValuesOfe(new Object[]{pT, null}); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final OutgoingFromExit.Match partialMatch) { + return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for e. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfe(final Transition pT) { + return rawStreamAllValuesOfe(new Object[]{pT, null}).collect(Collectors.toSet()); + } + + @Override + protected OutgoingFromExit.Match tupleToMatch(final Tuple t) { + try { + return OutgoingFromExit.Match.newMatch((Transition) t.get(POSITION_T), (Exit) t.get(POSITION_E)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected OutgoingFromExit.Match arrayToMatch(final Object[] match) { + try { + return OutgoingFromExit.Match.newMatch((Transition) match[POSITION_T], (Exit) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected OutgoingFromExit.Match arrayToMatchMutable(final Object[] match) { + try { + return OutgoingFromExit.Match.newMutableMatch((Transition) match[POSITION_T], (Exit) match[POSITION_E]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return OutgoingFromExit.instance(); + } + } + + private OutgoingFromExit() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static OutgoingFromExit instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected OutgoingFromExit.Matcher instantiate(final ViatraQueryEngine engine) { + return OutgoingFromExit.Matcher.on(engine); + } + + @Override + public OutgoingFromExit.Matcher instantiate() { + return OutgoingFromExit.Matcher.create(); + } + + @Override + public OutgoingFromExit.Match newEmptyMatch() { + return OutgoingFromExit.Match.newEmptyMatch(); + } + + @Override + public OutgoingFromExit.Match newMatch(final Object... parameters) { + return OutgoingFromExit.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static OutgoingFromExit INSTANCE = new OutgoingFromExit(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static OutgoingFromExit.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Exit")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_t, parameter_e); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("t","e"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_t = body.getOrCreateVariableByName("t"); + PVariable var_e = body.getOrCreateVariableByName("e"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Exit"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_t, parameter_t), + new ExportedParameter(body, var_e, parameter_e) + )); + // Exit.outgoingTransitions(e,t) + new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Exit"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new Equality(body, var__virtual_0_, var_t); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("e") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // Final
+ *         /////////
+ *         
+ *         {@literal @}Constraint(severity="error", message="error", key = {f})
+ *         pattern outgoingFromFinal(t : Transition, f : FinalState) {
+ *         	FinalState.outgoingTransitions(f,t);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class OutgoingFromFinal extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Transition fT; + + private FinalState fF; + + private static List parameterNames = makeImmutableList("t", "f"); + + private Match(final Transition pT, final FinalState pF) { + this.fT = pT; + this.fF = pF; + } + + @Override + public Object get(final String parameterName) { + if ("t".equals(parameterName)) return this.fT; + if ("f".equals(parameterName)) return this.fF; + return null; + } + + public Transition getT() { + return this.fT; + } + + public FinalState getF() { + return this.fF; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("t".equals(parameterName) ) { + this.fT = (Transition) newValue; + return true; + } + if ("f".equals(parameterName) ) { + this.fF = (FinalState) newValue; + return true; + } + return false; + } + + public void setT(final Transition pT) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT = pT; + } + + public void setF(final FinalState pF) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fF = pF; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal"; + } + + @Override + public List parameterNames() { + return OutgoingFromFinal.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fT, fF}; + } + + @Override + public OutgoingFromFinal.Match toImmutable() { + return isMutable() ? newMatch(fT, fF) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"t\"=" + prettyPrintValue(fT) + ", "); + result.append("\"f\"=" + prettyPrintValue(fF)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fT, fF); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof OutgoingFromFinal.Match)) { + OutgoingFromFinal.Match other = (OutgoingFromFinal.Match) obj; + return Objects.equals(fT, other.fT) && Objects.equals(fF, other.fF); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public OutgoingFromFinal specification() { + return OutgoingFromFinal.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static OutgoingFromFinal.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static OutgoingFromFinal.Match newMutableMatch(final Transition pT, final FinalState pF) { + return new Mutable(pT, pF); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return the (partial) match object. + * + */ + public static OutgoingFromFinal.Match newMatch(final Transition pT, final FinalState pF) { + return new Immutable(pT, pF); + } + + private static final class Mutable extends OutgoingFromFinal.Match { + Mutable(final Transition pT, final FinalState pF) { + super(pT, pF); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends OutgoingFromFinal.Match { + Immutable(final Transition pT, final FinalState pF) { + super(pT, pF); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // Final
+   * /////////
+   * 
+   * {@literal @}Constraint(severity="error", message="error", key = {f})
+   * pattern outgoingFromFinal(t : Transition, f : FinalState) {
+   * 	FinalState.outgoingTransitions(f,t);
+   * }
+   * 
+ * + * @see Match + * @see OutgoingFromFinal + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static OutgoingFromFinal.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static OutgoingFromFinal.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_T = 0; + + private final static int POSITION_F = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OutgoingFromFinal.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Transition pT, final FinalState pF) { + return rawStreamAllMatches(new Object[]{pT, pF}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Transition pT, final FinalState pF) { + return rawStreamAllMatches(new Object[]{pT, pF}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Transition pT, final FinalState pF) { + return rawGetOneArbitraryMatch(new Object[]{pT, pF}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Transition pT, final FinalState pF) { + return rawHasMatch(new Object[]{pT, pF}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Transition pT, final FinalState pF) { + return rawCountMatches(new Object[]{pT, pF}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Transition pT, final FinalState pF, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pT, pF}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pF the fixed value of pattern parameter f, or null if not bound. + * @return the (partial) match object. + * + */ + public OutgoingFromFinal.Match newMatch(final Transition pT, final FinalState pF) { + return OutgoingFromFinal.Match.newMatch(pT, pF); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft(final Object[] parameters) { + return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final OutgoingFromFinal.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final FinalState pF) { + return rawStreamAllValuesOft(new Object[]{null, pF}); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final OutgoingFromFinal.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final FinalState pF) { + return rawStreamAllValuesOft(new Object[]{null, pF}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for f. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOff(final Object[] parameters) { + return rawStreamAllValues(POSITION_F, parameters).map(FinalState.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for f. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOff() { + return rawStreamAllValuesOff(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for f. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOff() { + return rawStreamAllValuesOff(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for f. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOff(final OutgoingFromFinal.Match partialMatch) { + return rawStreamAllValuesOff(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for f. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOff(final Transition pT) { + return rawStreamAllValuesOff(new Object[]{pT, null}); + } + + /** + * Retrieve the set of values that occur in matches for f. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOff(final OutgoingFromFinal.Match partialMatch) { + return rawStreamAllValuesOff(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for f. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOff(final Transition pT) { + return rawStreamAllValuesOff(new Object[]{pT, null}).collect(Collectors.toSet()); + } + + @Override + protected OutgoingFromFinal.Match tupleToMatch(final Tuple t) { + try { + return OutgoingFromFinal.Match.newMatch((Transition) t.get(POSITION_T), (FinalState) t.get(POSITION_F)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected OutgoingFromFinal.Match arrayToMatch(final Object[] match) { + try { + return OutgoingFromFinal.Match.newMatch((Transition) match[POSITION_T], (FinalState) match[POSITION_F]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected OutgoingFromFinal.Match arrayToMatchMutable(final Object[] match) { + try { + return OutgoingFromFinal.Match.newMutableMatch((Transition) match[POSITION_T], (FinalState) match[POSITION_F]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return OutgoingFromFinal.instance(); + } + } + + private OutgoingFromFinal() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static OutgoingFromFinal instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected OutgoingFromFinal.Matcher instantiate(final ViatraQueryEngine engine) { + return OutgoingFromFinal.Matcher.on(engine); + } + + @Override + public OutgoingFromFinal.Matcher instantiate() { + return OutgoingFromFinal.Matcher.create(); + } + + @Override + public OutgoingFromFinal.Match newEmptyMatch() { + return OutgoingFromFinal.Match.newEmptyMatch(); + } + + @Override + public OutgoingFromFinal.Match newMatch(final Object... parameters) { + return OutgoingFromFinal.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static OutgoingFromFinal INSTANCE = new OutgoingFromFinal(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static OutgoingFromFinal.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final PParameter parameter_f = new PParameter("f", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "FinalState")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_t, parameter_f); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("t","f"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_t = body.getOrCreateVariableByName("t"); + PVariable var_f = body.getOrCreateVariableByName("f"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_f), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "FinalState"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_t, parameter_t), + new ExportedParameter(body, var_f, parameter_f) + )); + // FinalState.outgoingTransitions(f,t) + new TypeConstraint(body, Tuples.flatTupleOf(var_f), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "FinalState"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_f, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new Equality(body, var__virtual_0_, var_t); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("f") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         pattern StateInRegion(region: Region, state: State) {
+ *         	Region.vertices(region,state);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class StateInRegion extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Region fRegion; + + private State fState; + + private static List parameterNames = makeImmutableList("region", "state"); + + private Match(final Region pRegion, final State pState) { + this.fRegion = pRegion; + this.fState = pState; + } + + @Override + public Object get(final String parameterName) { + if ("region".equals(parameterName)) return this.fRegion; + if ("state".equals(parameterName)) return this.fState; + return null; + } + + public Region getRegion() { + return this.fRegion; + } + + public State getState() { + return this.fState; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("region".equals(parameterName) ) { + this.fRegion = (Region) newValue; + return true; + } + if ("state".equals(parameterName) ) { + this.fState = (State) newValue; + return true; + } + return false; + } + + public void setRegion(final Region pRegion) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fRegion = pRegion; + } + + public void setState(final State pState) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fState = pState; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion"; + } + + @Override + public List parameterNames() { + return StateInRegion.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fRegion, fState}; + } + + @Override + public StateInRegion.Match toImmutable() { + return isMutable() ? newMatch(fRegion, fState) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"region\"=" + prettyPrintValue(fRegion) + ", "); + result.append("\"state\"=" + prettyPrintValue(fState)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fRegion, fState); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof StateInRegion.Match)) { + StateInRegion.Match other = (StateInRegion.Match) obj; + return Objects.equals(fRegion, other.fRegion) && Objects.equals(fState, other.fState); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public StateInRegion specification() { + return StateInRegion.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static StateInRegion.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static StateInRegion.Match newMutableMatch(final Region pRegion, final State pState) { + return new Mutable(pRegion, pState); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return the (partial) match object. + * + */ + public static StateInRegion.Match newMatch(final Region pRegion, final State pState) { + return new Immutable(pRegion, pState); + } + + private static final class Mutable extends StateInRegion.Match { + Mutable(final Region pRegion, final State pState) { + super(pRegion, pState); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends StateInRegion.Match { + Immutable(final Region pRegion, final State pState) { + super(pRegion, pState); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * pattern StateInRegion(region: Region, state: State) {
+   * 	Region.vertices(region,state);
+   * }
+   * 
+ * + * @see Match + * @see StateInRegion + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static StateInRegion.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static StateInRegion.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_REGION = 0; + + private final static int POSITION_STATE = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(StateInRegion.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Region pRegion, final State pState) { + return rawStreamAllMatches(new Object[]{pRegion, pState}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Region pRegion, final State pState) { + return rawStreamAllMatches(new Object[]{pRegion, pState}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Region pRegion, final State pState) { + return rawGetOneArbitraryMatch(new Object[]{pRegion, pState}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Region pRegion, final State pState) { + return rawHasMatch(new Object[]{pRegion, pState}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Region pRegion, final State pState) { + return rawCountMatches(new Object[]{pRegion, pState}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Region pRegion, final State pState, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pRegion, pState}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pRegion the fixed value of pattern parameter region, or null if not bound. + * @param pState the fixed value of pattern parameter state, or null if not bound. + * @return the (partial) match object. + * + */ + public StateInRegion.Match newMatch(final Region pRegion, final State pState) { + return StateInRegion.Match.newMatch(pRegion, pState); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfregion(final Object[] parameters) { + return rawStreamAllValues(POSITION_REGION, parameters).map(Region.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfregion() { + return rawStreamAllValuesOfregion(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfregion() { + return rawStreamAllValuesOfregion(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for region. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfregion(final StateInRegion.Match partialMatch) { + return rawStreamAllValuesOfregion(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for region. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfregion(final State pState) { + return rawStreamAllValuesOfregion(new Object[]{null, pState}); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfregion(final StateInRegion.Match partialMatch) { + return rawStreamAllValuesOfregion(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for region. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfregion(final State pState) { + return rawStreamAllValuesOfregion(new Object[]{null, pState}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for state. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfstate(final Object[] parameters) { + return rawStreamAllValues(POSITION_STATE, parameters).map(State.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for state. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfstate() { + return rawStreamAllValuesOfstate(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for state. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfstate() { + return rawStreamAllValuesOfstate(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for state. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfstate(final StateInRegion.Match partialMatch) { + return rawStreamAllValuesOfstate(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for state. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfstate(final Region pRegion) { + return rawStreamAllValuesOfstate(new Object[]{pRegion, null}); + } + + /** + * Retrieve the set of values that occur in matches for state. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfstate(final StateInRegion.Match partialMatch) { + return rawStreamAllValuesOfstate(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for state. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfstate(final Region pRegion) { + return rawStreamAllValuesOfstate(new Object[]{pRegion, null}).collect(Collectors.toSet()); + } + + @Override + protected StateInRegion.Match tupleToMatch(final Tuple t) { + try { + return StateInRegion.Match.newMatch((Region) t.get(POSITION_REGION), (State) t.get(POSITION_STATE)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected StateInRegion.Match arrayToMatch(final Object[] match) { + try { + return StateInRegion.Match.newMatch((Region) match[POSITION_REGION], (State) match[POSITION_STATE]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected StateInRegion.Match arrayToMatchMutable(final Object[] match) { + try { + return StateInRegion.Match.newMutableMatch((Region) match[POSITION_REGION], (State) match[POSITION_STATE]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return StateInRegion.instance(); + } + } + + private StateInRegion() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static StateInRegion instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected StateInRegion.Matcher instantiate(final ViatraQueryEngine engine) { + return StateInRegion.Matcher.on(engine); + } + + @Override + public StateInRegion.Matcher instantiate() { + return StateInRegion.Matcher.create(); + } + + @Override + public StateInRegion.Match newEmptyMatch() { + return StateInRegion.Match.newEmptyMatch(); + } + + @Override + public StateInRegion.Match newMatch(final Object... parameters) { + return StateInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static StateInRegion INSTANCE = new StateInRegion(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static StateInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_region = new PParameter("region", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT); + + private final PParameter parameter_state = new PParameter("state", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "State")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_region, parameter_state); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("region","state"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_region = body.getOrCreateVariableByName("region"); + PVariable var_state = body.getOrCreateVariableByName("state"); + new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_state), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "State"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_region, parameter_region), + new ExportedParameter(body, var_state, parameter_state) + )); + // Region.vertices(region,state) + new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_region, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_state); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern synchHasNoIncoming(s : Synchronization) {
+ *         	neg find transition(_, _, s);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchHasNoIncoming extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private static List parameterNames = makeImmutableList("s"); + + private Match(final Synchronization pS) { + this.fS = pS; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming"; + } + + @Override + public List parameterNames() { + return SynchHasNoIncoming.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS}; + } + + @Override + public SynchHasNoIncoming.Match toImmutable() { + return isMutable() ? newMatch(fS) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchHasNoIncoming.Match)) { + SynchHasNoIncoming.Match other = (SynchHasNoIncoming.Match) obj; + return Objects.equals(fS, other.fS); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchHasNoIncoming specification() { + return SynchHasNoIncoming.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchHasNoIncoming.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchHasNoIncoming.Match newMutableMatch(final Synchronization pS) { + return new Mutable(pS); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchHasNoIncoming.Match newMatch(final Synchronization pS) { + return new Immutable(pS); + } + + private static final class Mutable extends SynchHasNoIncoming.Match { + Mutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchHasNoIncoming.Match { + Immutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern synchHasNoIncoming(s : Synchronization) {
+   * 	neg find transition(_, _, s);
+   * }
+   * 
+ * + * @see Match + * @see SynchHasNoIncoming + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchHasNoIncoming.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchHasNoIncoming.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchHasNoIncoming.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS) { + return rawGetOneArbitraryMatch(new Object[]{pS}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS) { + return rawHasMatch(new Object[]{pS}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS) { + return rawCountMatches(new Object[]{pS}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchHasNoIncoming.Match newMatch(final Synchronization pS) { + return SynchHasNoIncoming.Match.newMatch(pS); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + @Override + protected SynchHasNoIncoming.Match tupleToMatch(final Tuple t) { + try { + return SynchHasNoIncoming.Match.newMatch((Synchronization) t.get(POSITION_S)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchHasNoIncoming.Match arrayToMatch(final Object[] match) { + try { + return SynchHasNoIncoming.Match.newMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchHasNoIncoming.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchHasNoIncoming.Match.newMutableMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchHasNoIncoming.instance(); + } + } + + private SynchHasNoIncoming() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchHasNoIncoming instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchHasNoIncoming.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchHasNoIncoming.Matcher.on(engine); + } + + @Override + public SynchHasNoIncoming.Matcher instantiate() { + return SynchHasNoIncoming.Matcher.create(); + } + + @Override + public SynchHasNoIncoming.Match newEmptyMatch() { + return SynchHasNoIncoming.Match.newEmptyMatch(); + } + + @Override + public SynchHasNoIncoming.Match newMatch(final Object... parameters) { + return SynchHasNoIncoming.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchHasNoIncoming INSTANCE = new SynchHasNoIncoming(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchHasNoIncoming.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s) + )); + // neg find transition(_, _, s) + new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var___1_, var_s), Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         /////////
+ *         // Synchronization
+ *         /////////
+ *         
+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern synchHasNoOutgoing(s : Synchronization) {
+ *         	neg find transition(_, s, _);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchHasNoOutgoing extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private static List parameterNames = makeImmutableList("s"); + + private Match(final Synchronization pS) { + this.fS = pS; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing"; + } + + @Override + public List parameterNames() { + return SynchHasNoOutgoing.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS}; + } + + @Override + public SynchHasNoOutgoing.Match toImmutable() { + return isMutable() ? newMatch(fS) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchHasNoOutgoing.Match)) { + SynchHasNoOutgoing.Match other = (SynchHasNoOutgoing.Match) obj; + return Objects.equals(fS, other.fS); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchHasNoOutgoing specification() { + return SynchHasNoOutgoing.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchHasNoOutgoing.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchHasNoOutgoing.Match newMutableMatch(final Synchronization pS) { + return new Mutable(pS); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchHasNoOutgoing.Match newMatch(final Synchronization pS) { + return new Immutable(pS); + } + + private static final class Mutable extends SynchHasNoOutgoing.Match { + Mutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchHasNoOutgoing.Match { + Immutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * /////////
+   * // Synchronization
+   * /////////
+   * 
+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern synchHasNoOutgoing(s : Synchronization) {
+   * 	neg find transition(_, s, _);
+   * }
+   * 
+ * + * @see Match + * @see SynchHasNoOutgoing + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchHasNoOutgoing.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchHasNoOutgoing.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchHasNoOutgoing.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS) { + return rawGetOneArbitraryMatch(new Object[]{pS}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS) { + return rawHasMatch(new Object[]{pS}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS) { + return rawCountMatches(new Object[]{pS}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchHasNoOutgoing.Match newMatch(final Synchronization pS) { + return SynchHasNoOutgoing.Match.newMatch(pS); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + @Override + protected SynchHasNoOutgoing.Match tupleToMatch(final Tuple t) { + try { + return SynchHasNoOutgoing.Match.newMatch((Synchronization) t.get(POSITION_S)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchHasNoOutgoing.Match arrayToMatch(final Object[] match) { + try { + return SynchHasNoOutgoing.Match.newMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchHasNoOutgoing.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchHasNoOutgoing.Match.newMutableMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchHasNoOutgoing.instance(); + } + } + + private SynchHasNoOutgoing() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchHasNoOutgoing instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchHasNoOutgoing.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchHasNoOutgoing.Matcher.on(engine); + } + + @Override + public SynchHasNoOutgoing.Matcher instantiate() { + return SynchHasNoOutgoing.Matcher.create(); + } + + @Override + public SynchHasNoOutgoing.Match newEmptyMatch() { + return SynchHasNoOutgoing.Match.newEmptyMatch(); + } + + @Override + public SynchHasNoOutgoing.Match newMatch(final Object... parameters) { + return SynchHasNoOutgoing.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchHasNoOutgoing INSTANCE = new SynchHasNoOutgoing(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchHasNoOutgoing.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s) + )); + // neg find transition(_, s, _) + new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var___1_), Transition.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         Simplifying model generation
+ *          
+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern synchThree(s: Synchronization) {
+ *         	Transition.target(t1,s);
+ *         	Transition.target(t2,s);
+ *         	Transition.target(t3,s);
+ *         	t1!=t2;
+ *         	t2!=t3;
+ *         	t1!=t3;
+ *         } or {
+ *         	Transition.source(t1,s);
+ *         	Transition.source(t2,s);
+ *         	Transition.source(t3,s);
+ *         	t1!=t2;
+ *         	t2!=t3;
+ *         	t1!=t3;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchThree extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private static List parameterNames = makeImmutableList("s"); + + private Match(final Synchronization pS) { + this.fS = pS; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree"; + } + + @Override + public List parameterNames() { + return SynchThree.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS}; + } + + @Override + public SynchThree.Match toImmutable() { + return isMutable() ? newMatch(fS) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchThree.Match)) { + SynchThree.Match other = (SynchThree.Match) obj; + return Objects.equals(fS, other.fS); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchThree specification() { + return SynchThree.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchThree.Match newEmptyMatch() { + return new Mutable(null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchThree.Match newMutableMatch(final Synchronization pS) { + return new Mutable(pS); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchThree.Match newMatch(final Synchronization pS) { + return new Immutable(pS); + } + + private static final class Mutable extends SynchThree.Match { + Mutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchThree.Match { + Immutable(final Synchronization pS) { + super(pS); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * Simplifying model generation
+   *  
+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern synchThree(s: Synchronization) {
+   * 	Transition.target(t1,s);
+   * 	Transition.target(t2,s);
+   * 	Transition.target(t3,s);
+   * 	t1!=t2;
+   * 	t2!=t3;
+   * 	t1!=t3;
+   * } or {
+   * 	Transition.source(t1,s);
+   * 	Transition.source(t2,s);
+   * 	Transition.source(t3,s);
+   * 	t1!=t2;
+   * 	t2!=t3;
+   * 	t1!=t3;
+   * }
+   * 
+ * + * @see Match + * @see SynchThree + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchThree.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchThree.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchThree.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS) { + return rawStreamAllMatches(new Object[]{pS}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS) { + return rawGetOneArbitraryMatch(new Object[]{pS}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS) { + return rawHasMatch(new Object[]{pS}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS) { + return rawCountMatches(new Object[]{pS}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchThree.Match newMatch(final Synchronization pS) { + return SynchThree.Match.newMatch(pS); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + @Override + protected SynchThree.Match tupleToMatch(final Tuple t) { + try { + return SynchThree.Match.newMatch((Synchronization) t.get(POSITION_S)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchThree.Match arrayToMatch(final Object[] match) { + try { + return SynchThree.Match.newMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchThree.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchThree.Match.newMutableMatch((Synchronization) match[POSITION_S]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchThree.instance(); + } + } + + private SynchThree() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchThree instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchThree.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchThree.Matcher.on(engine); + } + + @Override + public SynchThree.Matcher instantiate() { + return SynchThree.Matcher.create(); + } + + @Override + public SynchThree.Match newEmptyMatch() { + return SynchThree.Match.newEmptyMatch(); + } + + @Override + public SynchThree.Match newMatch(final Object... parameters) { + return SynchThree.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchThree INSTANCE = new SynchThree(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchThree.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_t1 = body.getOrCreateVariableByName("t1"); + PVariable var_t2 = body.getOrCreateVariableByName("t2"); + PVariable var_t3 = body.getOrCreateVariableByName("t3"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s) + )); + // Transition.target(t1,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_s); + // Transition.target(t2,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t2, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_s); + // Transition.target(t3,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t3), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t3, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_2_, var_s); + // t1!=t2 + new Inequality(body, var_t1, var_t2); + // t2!=t3 + new Inequality(body, var_t2, var_t3); + // t1!=t3 + new Inequality(body, var_t1, var_t3); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_t1 = body.getOrCreateVariableByName("t1"); + PVariable var_t2 = body.getOrCreateVariableByName("t2"); + PVariable var_t3 = body.getOrCreateVariableByName("t3"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s) + )); + // Transition.source(t1,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_s); + // Transition.source(t2,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t2, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_s); + // Transition.source(t3,s) + new TypeConstraint(body, Tuples.flatTupleOf(var_t3), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t3, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_2_, var_s); + // t1!=t2 + new Inequality(body, var_t1, var_t2); + // t2!=t3 + new Inequality(body, var_t2, var_t3); + // t1!=t3 + new Inequality(body, var_t1, var_t3); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) {
+ *         	find transition(t1, v1, s);
+ *         	find transition(t2, v2, s);
+ *         	t1!=t2;
+ *         	Region.vertices(r, v1);
+ *         	Region.vertices(r, v2);
+ *         } or {
+ *         	find transition(t1, s, v1);
+ *         	find transition(t2, s, v2);
+ *         	t1!=t2;
+ *         	Region.vertices(r, v1);
+ *         	Region.vertices(r, v2);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchronizedIncomingInSameRegion extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private Vertex fV1; + + private Vertex fV2; + + private static List parameterNames = makeImmutableList("s", "v1", "v2"); + + private Match(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + this.fS = pS; + this.fV1 = pV1; + this.fV2 = pV2; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + if ("v1".equals(parameterName)) return this.fV1; + if ("v2".equals(parameterName)) return this.fV2; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + public Vertex getV1() { + return this.fV1; + } + + public Vertex getV2() { + return this.fV2; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + if ("v1".equals(parameterName) ) { + this.fV1 = (Vertex) newValue; + return true; + } + if ("v2".equals(parameterName) ) { + this.fV2 = (Vertex) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + public void setV1(final Vertex pV1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV1 = pV1; + } + + public void setV2(final Vertex pV2) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV2 = pV2; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion"; + } + + @Override + public List parameterNames() { + return SynchronizedIncomingInSameRegion.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS, fV1, fV2}; + } + + @Override + public SynchronizedIncomingInSameRegion.Match toImmutable() { + return isMutable() ? newMatch(fS, fV1, fV2) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS) + ", "); + result.append("\"v1\"=" + prettyPrintValue(fV1) + ", "); + result.append("\"v2\"=" + prettyPrintValue(fV2)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS, fV1, fV2); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchronizedIncomingInSameRegion.Match)) { + SynchronizedIncomingInSameRegion.Match other = (SynchronizedIncomingInSameRegion.Match) obj; + return Objects.equals(fS, other.fS) && Objects.equals(fV1, other.fV1) && Objects.equals(fV2, other.fV2); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchronizedIncomingInSameRegion specification() { + return SynchronizedIncomingInSameRegion.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchronizedIncomingInSameRegion.Match newEmptyMatch() { + return new Mutable(null, null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchronizedIncomingInSameRegion.Match newMutableMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return new Mutable(pS, pV1, pV2); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchronizedIncomingInSameRegion.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return new Immutable(pS, pV1, pV2); + } + + private static final class Mutable extends SynchronizedIncomingInSameRegion.Match { + Mutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + super(pS, pV1, pV2); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchronizedIncomingInSameRegion.Match { + Immutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + super(pS, pV1, pV2); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) {
+   * 	find transition(t1, v1, s);
+   * 	find transition(t2, v2, s);
+   * 	t1!=t2;
+   * 	Region.vertices(r, v1);
+   * 	Region.vertices(r, v2);
+   * } or {
+   * 	find transition(t1, s, v1);
+   * 	find transition(t2, s, v2);
+   * 	t1!=t2;
+   * 	Region.vertices(r, v1);
+   * 	Region.vertices(r, v2);
+   * }
+   * 
+ * + * @see Match + * @see SynchronizedIncomingInSameRegion + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchronizedIncomingInSameRegion.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchronizedIncomingInSameRegion.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static int POSITION_V1 = 1; + + private final static int POSITION_V2 = 2; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedIncomingInSameRegion.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawStreamAllMatches(new Object[]{pS, pV1, pV2}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawStreamAllMatches(new Object[]{pS, pV1, pV2}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawGetOneArbitraryMatch(new Object[]{pS, pV1, pV2}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawHasMatch(new Object[]{pS, pV1, pV2}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawCountMatches(new Object[]{pS, pV1, pV2}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS, pV1, pV2}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchronizedIncomingInSameRegion.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return SynchronizedIncomingInSameRegion.Match.newMatch(pS, pV1, pV2); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final Vertex pV1, final Vertex pV2) { + return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final Vertex pV1, final Vertex pV2) { + return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv1(final Object[] parameters) { + return rawStreamAllValues(POSITION_V1, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1() { + return rawStreamAllValuesOfv1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1() { + return rawStreamAllValuesOfv1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfv1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1(final Synchronization pS, final Vertex pV2) { + return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfv1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1(final Synchronization pS, final Vertex pV2) { + return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv2(final Object[] parameters) { + return rawStreamAllValues(POSITION_V2, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2() { + return rawStreamAllValuesOfv2(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2() { + return rawStreamAllValuesOfv2(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfv2(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2(final Synchronization pS, final Vertex pV1) { + return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2(final SynchronizedIncomingInSameRegion.Match partialMatch) { + return rawStreamAllValuesOfv2(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2(final Synchronization pS, final Vertex pV1) { + return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}).collect(Collectors.toSet()); + } + + @Override + protected SynchronizedIncomingInSameRegion.Match tupleToMatch(final Tuple t) { + try { + return SynchronizedIncomingInSameRegion.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V1), (Vertex) t.get(POSITION_V2)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedIncomingInSameRegion.Match arrayToMatch(final Object[] match) { + try { + return SynchronizedIncomingInSameRegion.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedIncomingInSameRegion.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchronizedIncomingInSameRegion.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchronizedIncomingInSameRegion.instance(); + } + } + + private SynchronizedIncomingInSameRegion() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchronizedIncomingInSameRegion instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchronizedIncomingInSameRegion.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchronizedIncomingInSameRegion.Matcher.on(engine); + } + + @Override + public SynchronizedIncomingInSameRegion.Matcher instantiate() { + return SynchronizedIncomingInSameRegion.Matcher.create(); + } + + @Override + public SynchronizedIncomingInSameRegion.Match newEmptyMatch() { + return SynchronizedIncomingInSameRegion.Match.newEmptyMatch(); + } + + @Override + public SynchronizedIncomingInSameRegion.Match newMatch(final Object... parameters) { + 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]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchronizedIncomingInSameRegion INSTANCE = new SynchronizedIncomingInSameRegion(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchronizedIncomingInSameRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final PParameter parameter_v1 = new PParameter("v1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final PParameter parameter_v2 = new PParameter("v2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s, parameter_v1, parameter_v2); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s","v1","v2"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v1 = body.getOrCreateVariableByName("v1"); + PVariable var_v2 = body.getOrCreateVariableByName("v2"); + PVariable var_t1 = body.getOrCreateVariableByName("t1"); + PVariable var_t2 = body.getOrCreateVariableByName("t2"); + PVariable var_r = body.getOrCreateVariableByName("r"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v1, parameter_v1), + new ExportedParameter(body, var_v2, parameter_v2) + )); + // find transition(t1, v1, s) + new PositivePatternCall(body, Tuples.flatTupleOf(var_t1, var_v1, var_s), Transition.instance().getInternalQueryRepresentation()); + // find transition(t2, v2, s) + new PositivePatternCall(body, Tuples.flatTupleOf(var_t2, var_v2, var_s), Transition.instance().getInternalQueryRepresentation()); + // t1!=t2 + new Inequality(body, var_t1, var_t2); + // Region.vertices(r, v1) + new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_v1); + // Region.vertices(r, v2) + new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_v2); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v1 = body.getOrCreateVariableByName("v1"); + PVariable var_v2 = body.getOrCreateVariableByName("v2"); + PVariable var_t1 = body.getOrCreateVariableByName("t1"); + PVariable var_t2 = body.getOrCreateVariableByName("t2"); + PVariable var_r = body.getOrCreateVariableByName("r"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v1, parameter_v1), + new ExportedParameter(body, var_v2, parameter_v2) + )); + // find transition(t1, s, v1) + new PositivePatternCall(body, Tuples.flatTupleOf(var_t1, var_s, var_v1), Transition.instance().getInternalQueryRepresentation()); + // find transition(t2, s, v2) + new PositivePatternCall(body, Tuples.flatTupleOf(var_t2, var_s, var_v2), Transition.instance().getInternalQueryRepresentation()); + // t1!=t2 + new Inequality(body, var_t1, var_t2); + // Region.vertices(r, v1) + new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_v1); + // Region.vertices(r, v2) + new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_v2); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) {
+ *         	find transition(_, v, s);
+ *         	find child(c,v);
+ *         	neg find hasMultipleRegions(c);
+ *         } or {
+ *         	find transition(_, s, v);
+ *         	find child(c,v);
+ *         	neg find hasMultipleRegions(c);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchronizedRegionDoesNotHaveMultipleRegions extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private Vertex fV; + + private static List parameterNames = makeImmutableList("s", "v"); + + private Match(final Synchronization pS, final Vertex pV) { + this.fS = pS; + this.fV = pV; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + if ("v".equals(parameterName)) return this.fV; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + public Vertex getV() { + return this.fV; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + if ("v".equals(parameterName) ) { + this.fV = (Vertex) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + public void setV(final Vertex pV) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV = pV; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions"; + } + + @Override + public List parameterNames() { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS, fV}; + } + + @Override + public SynchronizedRegionDoesNotHaveMultipleRegions.Match toImmutable() { + return isMutable() ? newMatch(fS, fV) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS) + ", "); + result.append("\"v\"=" + prettyPrintValue(fV)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS, fV); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchronizedRegionDoesNotHaveMultipleRegions.Match)) { + SynchronizedRegionDoesNotHaveMultipleRegions.Match other = (SynchronizedRegionDoesNotHaveMultipleRegions.Match) obj; + return Objects.equals(fS, other.fS) && Objects.equals(fV, other.fV); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchronizedRegionDoesNotHaveMultipleRegions specification() { + return SynchronizedRegionDoesNotHaveMultipleRegions.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newMutableMatch(final Synchronization pS, final Vertex pV) { + return new Mutable(pS, pV); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Synchronization pS, final Vertex pV) { + return new Immutable(pS, pV); + } + + private static final class Mutable extends SynchronizedRegionDoesNotHaveMultipleRegions.Match { + Mutable(final Synchronization pS, final Vertex pV) { + super(pS, pV); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchronizedRegionDoesNotHaveMultipleRegions.Match { + Immutable(final Synchronization pS, final Vertex pV) { + super(pS, pV); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) {
+   * 	find transition(_, v, s);
+   * 	find child(c,v);
+   * 	neg find hasMultipleRegions(c);
+   * } or {
+   * 	find transition(_, s, v);
+   * 	find child(c,v);
+   * 	neg find hasMultipleRegions(c);
+   * }
+   * 
+ * + * @see Match + * @see SynchronizedRegionDoesNotHaveMultipleRegions + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static int POSITION_V = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS, final Vertex pV) { + return rawStreamAllMatches(new Object[]{pS, pV}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS, final Vertex pV) { + return rawStreamAllMatches(new Object[]{pS, pV}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS, final Vertex pV) { + return rawGetOneArbitraryMatch(new Object[]{pS, pV}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS, final Vertex pV) { + return rawHasMatch(new Object[]{pS, pV}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS, final Vertex pV) { + return rawCountMatches(new Object[]{pS, pV}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS, pV}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV the fixed value of pattern parameter v, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Synchronization pS, final Vertex pV) { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch(pS, pV); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final Vertex pV) { + return rawStreamAllValuesOfs(new Object[]{null, pV}); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final Vertex pV) { + return rawStreamAllValuesOfs(new Object[]{null, pV}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv(final Object[] parameters) { + return rawStreamAllValues(POSITION_V, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv() { + return rawStreamAllValuesOfv(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for v. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) { + return rawStreamAllValuesOfv(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for v. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv(final Synchronization pS) { + return rawStreamAllValuesOfv(new Object[]{pS, null}); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) { + return rawStreamAllValuesOfv(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv(final Synchronization pS) { + return rawStreamAllValuesOfv(new Object[]{pS, null}).collect(Collectors.toSet()); + } + + @Override + protected SynchronizedRegionDoesNotHaveMultipleRegions.Match tupleToMatch(final Tuple t) { + try { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedRegionDoesNotHaveMultipleRegions.Match arrayToMatch(final Object[] match) { + try { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedRegionDoesNotHaveMultipleRegions.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchronizedRegionDoesNotHaveMultipleRegions.instance(); + } + } + + private SynchronizedRegionDoesNotHaveMultipleRegions() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchronizedRegionDoesNotHaveMultipleRegions instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchronizedRegionDoesNotHaveMultipleRegions.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.on(engine); + } + + @Override + public SynchronizedRegionDoesNotHaveMultipleRegions.Matcher instantiate() { + return SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.create(); + } + + @Override + public SynchronizedRegionDoesNotHaveMultipleRegions.Match newEmptyMatch() { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newEmptyMatch(); + } + + @Override + public SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Object... parameters) { + return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchronizedRegionDoesNotHaveMultipleRegions INSTANCE = new SynchronizedRegionDoesNotHaveMultipleRegions(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchronizedRegionDoesNotHaveMultipleRegions.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s, parameter_v); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s","v"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v = body.getOrCreateVariableByName("v"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var_c = body.getOrCreateVariableByName("c"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v, parameter_v) + )); + // find transition(_, v, s) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v, var_s), Transition.instance().getInternalQueryRepresentation()); + // find child(c,v) + new PositivePatternCall(body, Tuples.flatTupleOf(var_c, var_v), Child.instance().getInternalQueryRepresentation()); + // neg find hasMultipleRegions(c) + new NegativePatternCall(body, Tuples.flatTupleOf(var_c), HasMultipleRegions.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v = body.getOrCreateVariableByName("v"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var_c = body.getOrCreateVariableByName("c"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v, parameter_v) + )); + // find transition(_, s, v) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var_v), Transition.instance().getInternalQueryRepresentation()); + // find child(c,v) + new PositivePatternCall(body, Tuples.flatTupleOf(var_c, var_v), Child.instance().getInternalQueryRepresentation()); + // neg find hasMultipleRegions(c) + new NegativePatternCall(body, Tuples.flatTupleOf(var_c), HasMultipleRegions.instance().getInternalQueryRepresentation()); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         {@literal @}Constraint(severity="error", message="error", key = {s})
+ *         pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) {
+ *         	find transition(_, v1, s);
+ *         	find transition(_, v2, s);
+ *         	CompositeElement.regions.vertices(r1, v1);
+ *         	CompositeElement.regions.vertices(r2, v2);
+ *         	r1 != r2;
+ *         } or {
+ *         	find transition(_, s, v1);
+ *         	find transition(_, s, v2);
+ *         	CompositeElement.regions.vertices(r1, v1);
+ *         	CompositeElement.regions.vertices(r2, v2);
+ *         	r1 != r2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class SynchronizedRegionsAreNotSiblings extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS; + + private Vertex fV1; + + private Vertex fV2; + + private static List parameterNames = makeImmutableList("s", "v1", "v2"); + + private Match(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + this.fS = pS; + this.fV1 = pV1; + this.fV2 = pV2; + } + + @Override + public Object get(final String parameterName) { + if ("s".equals(parameterName)) return this.fS; + if ("v1".equals(parameterName)) return this.fV1; + if ("v2".equals(parameterName)) return this.fV2; + return null; + } + + public Synchronization getS() { + return this.fS; + } + + public Vertex getV1() { + return this.fV1; + } + + public Vertex getV2() { + return this.fV2; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s".equals(parameterName) ) { + this.fS = (Synchronization) newValue; + return true; + } + if ("v1".equals(parameterName) ) { + this.fV1 = (Vertex) newValue; + return true; + } + if ("v2".equals(parameterName) ) { + this.fV2 = (Vertex) newValue; + return true; + } + return false; + } + + public void setS(final Synchronization pS) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS = pS; + } + + public void setV1(final Vertex pV1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV1 = pV1; + } + + public void setV2(final Vertex pV2) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fV2 = pV2; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings"; + } + + @Override + public List parameterNames() { + return SynchronizedRegionsAreNotSiblings.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS, fV1, fV2}; + } + + @Override + public SynchronizedRegionsAreNotSiblings.Match toImmutable() { + return isMutable() ? newMatch(fS, fV1, fV2) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s\"=" + prettyPrintValue(fS) + ", "); + result.append("\"v1\"=" + prettyPrintValue(fV1) + ", "); + result.append("\"v2\"=" + prettyPrintValue(fV2)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS, fV1, fV2); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof SynchronizedRegionsAreNotSiblings.Match)) { + SynchronizedRegionsAreNotSiblings.Match other = (SynchronizedRegionsAreNotSiblings.Match) obj; + return Objects.equals(fS, other.fS) && Objects.equals(fV1, other.fV1) && Objects.equals(fV2, other.fV2); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public SynchronizedRegionsAreNotSiblings specification() { + return SynchronizedRegionsAreNotSiblings.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static SynchronizedRegionsAreNotSiblings.Match newEmptyMatch() { + return new Mutable(null, null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static SynchronizedRegionsAreNotSiblings.Match newMutableMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return new Mutable(pS, pV1, pV2); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the (partial) match object. + * + */ + public static SynchronizedRegionsAreNotSiblings.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return new Immutable(pS, pV1, pV2); + } + + private static final class Mutable extends SynchronizedRegionsAreNotSiblings.Match { + Mutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + super(pS, pV1, pV2); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends SynchronizedRegionsAreNotSiblings.Match { + Immutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + super(pS, pV1, pV2); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * {@literal @}Constraint(severity="error", message="error", key = {s})
+   * pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) {
+   * 	find transition(_, v1, s);
+   * 	find transition(_, v2, s);
+   * 	CompositeElement.regions.vertices(r1, v1);
+   * 	CompositeElement.regions.vertices(r2, v2);
+   * 	r1 != r2;
+   * } or {
+   * 	find transition(_, s, v1);
+   * 	find transition(_, s, v2);
+   * 	CompositeElement.regions.vertices(r1, v1);
+   * 	CompositeElement.regions.vertices(r2, v2);
+   * 	r1 != r2;
+   * }
+   * 
+ * + * @see Match + * @see SynchronizedRegionsAreNotSiblings + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static SynchronizedRegionsAreNotSiblings.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static SynchronizedRegionsAreNotSiblings.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S = 0; + + private final static int POSITION_V1 = 1; + + private final static int POSITION_V2 = 2; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedRegionsAreNotSiblings.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawStreamAllMatches(new Object[]{pS, pV1, pV2}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawStreamAllMatches(new Object[]{pS, pV1, pV2}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawGetOneArbitraryMatch(new Object[]{pS, pV1, pV2}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawHasMatch(new Object[]{pS, pV1, pV2}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return rawCountMatches(new Object[]{pS, pV1, pV2}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS, pV1, pV2}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS the fixed value of pattern parameter s, or null if not bound. + * @param pV1 the fixed value of pattern parameter v1, or null if not bound. + * @param pV2 the fixed value of pattern parameter v2, or null if not bound. + * @return the (partial) match object. + * + */ + public SynchronizedRegionsAreNotSiblings.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) { + return SynchronizedRegionsAreNotSiblings.Match.newMatch(pS, pV1, pV2); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs(final Object[] parameters) { + return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs() { + return rawStreamAllValuesOfs(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for s. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs(final Vertex pV1, final Vertex pV2) { + return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs(final Vertex pV1, final Vertex pV2) { + return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv1(final Object[] parameters) { + return rawStreamAllValues(POSITION_V1, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1() { + return rawStreamAllValuesOfv1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1() { + return rawStreamAllValuesOfv1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfv1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv1(final Synchronization pS, final Vertex pV2) { + return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfv1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv1(final Synchronization pS, final Vertex pV2) { + return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfv2(final Object[] parameters) { + return rawStreamAllValues(POSITION_V2, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2() { + return rawStreamAllValuesOfv2(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2() { + return rawStreamAllValuesOfv2(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfv2(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfv2(final Synchronization pS, final Vertex pV1) { + return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2(final SynchronizedRegionsAreNotSiblings.Match partialMatch) { + return rawStreamAllValuesOfv2(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for v2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfv2(final Synchronization pS, final Vertex pV1) { + return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}).collect(Collectors.toSet()); + } + + @Override + protected SynchronizedRegionsAreNotSiblings.Match tupleToMatch(final Tuple t) { + try { + return SynchronizedRegionsAreNotSiblings.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V1), (Vertex) t.get(POSITION_V2)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedRegionsAreNotSiblings.Match arrayToMatch(final Object[] match) { + try { + return SynchronizedRegionsAreNotSiblings.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected SynchronizedRegionsAreNotSiblings.Match arrayToMatchMutable(final Object[] match) { + try { + return SynchronizedRegionsAreNotSiblings.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return SynchronizedRegionsAreNotSiblings.instance(); + } + } + + private SynchronizedRegionsAreNotSiblings() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static SynchronizedRegionsAreNotSiblings instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected SynchronizedRegionsAreNotSiblings.Matcher instantiate(final ViatraQueryEngine engine) { + return SynchronizedRegionsAreNotSiblings.Matcher.on(engine); + } + + @Override + public SynchronizedRegionsAreNotSiblings.Matcher instantiate() { + return SynchronizedRegionsAreNotSiblings.Matcher.create(); + } + + @Override + public SynchronizedRegionsAreNotSiblings.Match newEmptyMatch() { + return SynchronizedRegionsAreNotSiblings.Match.newEmptyMatch(); + } + + @Override + public SynchronizedRegionsAreNotSiblings.Match newMatch(final Object... parameters) { + 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]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static SynchronizedRegionsAreNotSiblings INSTANCE = new SynchronizedRegionsAreNotSiblings(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static SynchronizedRegionsAreNotSiblings.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final PParameter parameter_v1 = new PParameter("v1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final PParameter parameter_v2 = new PParameter("v2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s, parameter_v1, parameter_v2); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s","v1","v2"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v1 = body.getOrCreateVariableByName("v1"); + PVariable var_v2 = body.getOrCreateVariableByName("v2"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + PVariable var_r1 = body.getOrCreateVariableByName("r1"); + PVariable var_r2 = body.getOrCreateVariableByName("r2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v1, parameter_v1), + new ExportedParameter(body, var_v2, parameter_v2) + )); + // find transition(_, v1, s) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v1, var_s), Transition.instance().getInternalQueryRepresentation()); + // find transition(_, v2, s) + new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_v2, var_s), Transition.instance().getInternalQueryRepresentation()); + // CompositeElement.regions.vertices(r1, v1) + new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_v1); + // CompositeElement.regions.vertices(r2, v2) + new TypeConstraint(body, Tuples.flatTupleOf(var_r2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r2, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_3_ = body.getOrCreateVariableByName(".virtual{3}"); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_, var__virtual_3_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_3_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_3_, var_v2); + // r1 != r2 + new Inequality(body, var_r1, var_r2); + bodies.add(body); + } + { + PBody body = new PBody(this); + PVariable var_s = body.getOrCreateVariableByName("s"); + PVariable var_v1 = body.getOrCreateVariableByName("v1"); + PVariable var_v2 = body.getOrCreateVariableByName("v2"); + PVariable var___0_ = body.getOrCreateVariableByName("_<0>"); + PVariable var___1_ = body.getOrCreateVariableByName("_<1>"); + PVariable var_r1 = body.getOrCreateVariableByName("r1"); + PVariable var_r2 = body.getOrCreateVariableByName("r2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s, parameter_s), + new ExportedParameter(body, var_v1, parameter_v1), + new ExportedParameter(body, var_v2, parameter_v2) + )); + // find transition(_, s, v1) + new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var_v1), Transition.instance().getInternalQueryRepresentation()); + // find transition(_, s, v2) + new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_s, var_v2), Transition.instance().getInternalQueryRepresentation()); + // CompositeElement.regions.vertices(r1, v1) + new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_v1); + // CompositeElement.regions.vertices(r2, v2) + new TypeConstraint(body, Tuples.flatTupleOf(var_r2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement"))); + PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_r2, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region"))); + PVariable var__virtual_3_ = body.getOrCreateVariableByName(".virtual{3}"); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_, var__virtual_3_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_3_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_3_, var_v2); + // r1 != r2 + new Inequality(body, var_r1, var_r2); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         pattern transition(t : Transition, src : Vertex, trg : Vertex) {
+ *         	Transition.source(t, src);
+ *         	Transition.target(t, trg);
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class Transition extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition fT; + + private Vertex fSrc; + + private Vertex fTrg; + + private static List parameterNames = makeImmutableList("t", "src", "trg"); + + private Match(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + this.fT = pT; + this.fSrc = pSrc; + this.fTrg = pTrg; + } + + @Override + public Object get(final String parameterName) { + if ("t".equals(parameterName)) return this.fT; + if ("src".equals(parameterName)) return this.fSrc; + if ("trg".equals(parameterName)) return this.fTrg; + return null; + } + + public ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition getT() { + return this.fT; + } + + public Vertex getSrc() { + return this.fSrc; + } + + public Vertex getTrg() { + return this.fTrg; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("t".equals(parameterName) ) { + this.fT = (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) newValue; + return true; + } + if ("src".equals(parameterName) ) { + this.fSrc = (Vertex) newValue; + return true; + } + if ("trg".equals(parameterName) ) { + this.fTrg = (Vertex) newValue; + return true; + } + return false; + } + + public void setT(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fT = pT; + } + + public void setSrc(final Vertex pSrc) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fSrc = pSrc; + } + + public void setTrg(final Vertex pTrg) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fTrg = pTrg; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition"; + } + + @Override + public List parameterNames() { + return Transition.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fT, fSrc, fTrg}; + } + + @Override + public Transition.Match toImmutable() { + return isMutable() ? newMatch(fT, fSrc, fTrg) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"t\"=" + prettyPrintValue(fT) + ", "); + result.append("\"src\"=" + prettyPrintValue(fSrc) + ", "); + result.append("\"trg\"=" + prettyPrintValue(fTrg)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fT, fSrc, fTrg); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof Transition.Match)) { + Transition.Match other = (Transition.Match) obj; + return Objects.equals(fT, other.fT) && Objects.equals(fSrc, other.fSrc) && Objects.equals(fTrg, other.fTrg); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public Transition specification() { + return Transition.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static Transition.Match newEmptyMatch() { + return new Mutable(null, null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static Transition.Match newMutableMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return new Mutable(pT, pSrc, pTrg); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return the (partial) match object. + * + */ + public static Transition.Match newMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return new Immutable(pT, pSrc, pTrg); + } + + private static final class Mutable extends Transition.Match { + Mutable(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + super(pT, pSrc, pTrg); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends Transition.Match { + Immutable(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + super(pT, pSrc, pTrg); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * pattern transition(t : Transition, src : Vertex, trg : Vertex) {
+   * 	Transition.source(t, src);
+   * 	Transition.target(t, trg);
+   * }
+   * 
+ * + * @see Match + * @see Transition + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static Transition.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static Transition.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_T = 0; + + private final static int POSITION_SRC = 1; + + private final static int POSITION_TRG = 2; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Transition.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return rawStreamAllMatches(new Object[]{pT, pSrc, pTrg}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return rawStreamAllMatches(new Object[]{pT, pSrc, pTrg}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return rawGetOneArbitraryMatch(new Object[]{pT, pSrc, pTrg}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return rawHasMatch(new Object[]{pT, pSrc, pTrg}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return rawCountMatches(new Object[]{pT, pSrc, pTrg}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pT, pSrc, pTrg}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pT the fixed value of pattern parameter t, or null if not bound. + * @param pSrc the fixed value of pattern parameter src, or null if not bound. + * @param pTrg the fixed value of pattern parameter trg, or null if not bound. + * @return the (partial) match object. + * + */ + public Transition.Match newMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) { + return Transition.Match.newMatch(pT, pSrc, pTrg); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOft(final Object[] parameters) { + return rawStreamAllValues(POSITION_T, parameters).map(ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft() { + return rawStreamAllValuesOft(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final Transition.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for t. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOft(final Vertex pSrc, final Vertex pTrg) { + return rawStreamAllValuesOft(new Object[]{null, pSrc, pTrg}); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final Transition.Match partialMatch) { + return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for t. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOft(final Vertex pSrc, final Vertex pTrg) { + return rawStreamAllValuesOft(new Object[]{null, pSrc, pTrg}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for src. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfsrc(final Object[] parameters) { + return rawStreamAllValues(POSITION_SRC, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for src. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfsrc() { + return rawStreamAllValuesOfsrc(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for src. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfsrc() { + return rawStreamAllValuesOfsrc(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for src. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfsrc(final Transition.Match partialMatch) { + return rawStreamAllValuesOfsrc(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for src. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfsrc(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pTrg) { + return rawStreamAllValuesOfsrc(new Object[]{pT, null, pTrg}); + } + + /** + * Retrieve the set of values that occur in matches for src. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfsrc(final Transition.Match partialMatch) { + return rawStreamAllValuesOfsrc(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for src. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfsrc(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pTrg) { + return rawStreamAllValuesOfsrc(new Object[]{pT, null, pTrg}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for trg. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOftrg(final Object[] parameters) { + return rawStreamAllValues(POSITION_TRG, parameters).map(Vertex.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for trg. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOftrg() { + return rawStreamAllValuesOftrg(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for trg. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOftrg() { + return rawStreamAllValuesOftrg(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for trg. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOftrg(final Transition.Match partialMatch) { + return rawStreamAllValuesOftrg(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for trg. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOftrg(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc) { + return rawStreamAllValuesOftrg(new Object[]{pT, pSrc, null}); + } + + /** + * Retrieve the set of values that occur in matches for trg. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOftrg(final Transition.Match partialMatch) { + return rawStreamAllValuesOftrg(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for trg. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOftrg(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc) { + return rawStreamAllValuesOftrg(new Object[]{pT, pSrc, null}).collect(Collectors.toSet()); + } + + @Override + protected Transition.Match tupleToMatch(final Tuple t) { + try { + 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)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected Transition.Match arrayToMatch(final Object[] match) { + try { + return Transition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) match[POSITION_T], (Vertex) match[POSITION_SRC], (Vertex) match[POSITION_TRG]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected Transition.Match arrayToMatchMutable(final Object[] match) { + try { + return Transition.Match.newMutableMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) match[POSITION_T], (Vertex) match[POSITION_SRC], (Vertex) match[POSITION_TRG]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return Transition.instance(); + } + } + + private Transition() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static Transition instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected Transition.Matcher instantiate(final ViatraQueryEngine engine) { + return Transition.Matcher.on(engine); + } + + @Override + public Transition.Matcher instantiate() { + return Transition.Matcher.create(); + } + + @Override + public Transition.Match newEmptyMatch() { + return Transition.Match.newEmptyMatch(); + } + + @Override + public Transition.Match newMatch(final Object... parameters) { + 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]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static Transition INSTANCE = new Transition(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static Transition.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT); + + private final PParameter parameter_src = new PParameter("src", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final PParameter parameter_trg = new PParameter("trg", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_t, parameter_src, parameter_trg); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("t","src","trg"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_t = body.getOrCreateVariableByName("t"); + PVariable var_src = body.getOrCreateVariableByName("src"); + PVariable var_trg = body.getOrCreateVariableByName("trg"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_src), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_trg), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_t, parameter_t), + new ExportedParameter(body, var_src, parameter_src), + new ExportedParameter(body, var_trg, parameter_trg) + )); + // Transition.source(t, src) + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_0_, var_src); + // Transition.target(t, trg) + new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition"))); + PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}"); + new TypeConstraint(body, Tuples.flatTupleOf(var_t, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target"))); + new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex"))); + new Equality(body, var__virtual_1_, var_trg); + bodies.add(body); + } + return bodies; + } + } +} 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 @@ +/** + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.log4j.Logger; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; +import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; +import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; +import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; +import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; +import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; +import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; +import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality; +import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; +import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; +import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; +import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; + +/** + * A pattern-specific query specification that can instantiate Matcher in a type-safe way. + * + *

Original source: + *

+ *         Simplifying model generation
+ *          
+ *         {@literal @}Constraint(severity="error", message="error", key = {s1,s2})
+ *         pattern twoSynch(s1 : Synchronization, s2 : Synchronization) {
+ *         	Synchronization(s1);
+ *         	Synchronization(s2);
+ *         	s1 != s2;
+ *         }
+ * 
+ * + * @see Matcher + * @see Match + * + */ +@SuppressWarnings("all") +public final class TwoSynch extends BaseGeneratedEMFQuerySpecification { + /** + * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch pattern, + * to be used in conjunction with {@link Matcher}. + * + *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. + * Each instance is a (possibly partial) substitution of pattern parameters, + * usable to represent a match of the pattern in the result of a query, + * or to specify the bound (fixed) input parameters when issuing a query. + * + * @see Matcher + * + */ + public static abstract class Match extends BasePatternMatch { + private Synchronization fS1; + + private Synchronization fS2; + + private static List parameterNames = makeImmutableList("s1", "s2"); + + private Match(final Synchronization pS1, final Synchronization pS2) { + this.fS1 = pS1; + this.fS2 = pS2; + } + + @Override + public Object get(final String parameterName) { + if ("s1".equals(parameterName)) return this.fS1; + if ("s2".equals(parameterName)) return this.fS2; + return null; + } + + public Synchronization getS1() { + return this.fS1; + } + + public Synchronization getS2() { + return this.fS2; + } + + @Override + public boolean set(final String parameterName, final Object newValue) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + if ("s1".equals(parameterName) ) { + this.fS1 = (Synchronization) newValue; + return true; + } + if ("s2".equals(parameterName) ) { + this.fS2 = (Synchronization) newValue; + return true; + } + return false; + } + + public void setS1(final Synchronization pS1) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS1 = pS1; + } + + public void setS2(final Synchronization pS2) { + if (!isMutable()) throw new java.lang.UnsupportedOperationException(); + this.fS2 = pS2; + } + + @Override + public String patternName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch"; + } + + @Override + public List parameterNames() { + return TwoSynch.Match.parameterNames; + } + + @Override + public Object[] toArray() { + return new Object[]{fS1, fS2}; + } + + @Override + public TwoSynch.Match toImmutable() { + return isMutable() ? newMatch(fS1, fS2) : this; + } + + @Override + public String prettyPrint() { + StringBuilder result = new StringBuilder(); + result.append("\"s1\"=" + prettyPrintValue(fS1) + ", "); + result.append("\"s2\"=" + prettyPrintValue(fS2)); + return result.toString(); + } + + @Override + public int hashCode() { + return Objects.hash(fS1, fS2); + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) { + return false; + } + if ((obj instanceof TwoSynch.Match)) { + TwoSynch.Match other = (TwoSynch.Match) obj; + return Objects.equals(fS1, other.fS1) && Objects.equals(fS2, other.fS2); + } else { + // this should be infrequent + if (!(obj instanceof IPatternMatch)) { + return false; + } + IPatternMatch otherSig = (IPatternMatch) obj; + return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); + } + } + + @Override + public TwoSynch specification() { + return TwoSynch.instance(); + } + + /** + * Returns an empty, mutable match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @return the empty match. + * + */ + public static TwoSynch.Match newEmptyMatch() { + return new Mutable(null, null); + } + + /** + * Returns a mutable (partial) match. + * Fields of the mutable match can be filled to create a partial match, usable as matcher input. + * + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return the new, mutable (partial) match object. + * + */ + public static TwoSynch.Match newMutableMatch(final Synchronization pS1, final Synchronization pS2) { + return new Mutable(pS1, pS2); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return the (partial) match object. + * + */ + public static TwoSynch.Match newMatch(final Synchronization pS1, final Synchronization pS2) { + return new Immutable(pS1, pS2); + } + + private static final class Mutable extends TwoSynch.Match { + Mutable(final Synchronization pS1, final Synchronization pS2) { + super(pS1, pS2); + } + + @Override + public boolean isMutable() { + return true; + } + } + + private static final class Immutable extends TwoSynch.Match { + Immutable(final Synchronization pS1, final Synchronization pS2) { + super(pS1, pS2); + } + + @Override + public boolean isMutable() { + return false; + } + } + } + + /** + * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch pattern, + * providing pattern-specific query methods. + * + *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, + * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. + * + *

Matches of the pattern will be represented as {@link Match}. + * + *

Original source: + *

+   * Simplifying model generation
+   *  
+   * {@literal @}Constraint(severity="error", message="error", key = {s1,s2})
+   * pattern twoSynch(s1 : Synchronization, s2 : Synchronization) {
+   * 	Synchronization(s1);
+   * 	Synchronization(s2);
+   * 	s1 != s2;
+   * }
+   * 
+ * + * @see Match + * @see TwoSynch + * + */ + public static class Matcher extends BaseMatcher { + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + public static TwoSynch.Matcher on(final ViatraQueryEngine engine) { + // check if matcher already exists + Matcher matcher = engine.getExistingMatcher(querySpecification()); + if (matcher == null) { + matcher = (Matcher)engine.getMatcher(querySpecification()); + } + return matcher; + } + + /** + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * @return an initialized matcher + * @noreference This method is for internal matcher initialization by the framework, do not call it manually. + * + */ + public static TwoSynch.Matcher create() { + return new Matcher(); + } + + private final static int POSITION_S1 = 0; + + private final static int POSITION_S2 = 1; + + private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(TwoSynch.Matcher.class); + + /** + * Initializes the pattern matcher within an existing VIATRA Query engine. + * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. + * + * @param engine the existing VIATRA Query engine in which this matcher will be created. + * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation + * + */ + private Matcher() { + super(querySpecification()); + } + + /** + * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return matches represented as a Match object. + * + */ + public Collection getAllMatches(final Synchronization pS1, final Synchronization pS2) { + return rawStreamAllMatches(new Object[]{pS1, pS2}).collect(Collectors.toSet()); + } + + /** + * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return a stream of matches represented as a Match object. + * + */ + public Stream streamAllMatches(final Synchronization pS1, final Synchronization pS2) { + return rawStreamAllMatches(new Object[]{pS1, pS2}); + } + + /** + * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return a match represented as a Match object, or null if no match is found. + * + */ + public Optional getOneArbitraryMatch(final Synchronization pS1, final Synchronization pS2) { + return rawGetOneArbitraryMatch(new Object[]{pS1, pS2}); + } + + /** + * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, + * under any possible substitution of the unspecified parameters (if any). + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return true if the input is a valid (partial) match of the pattern. + * + */ + public boolean hasMatch(final Synchronization pS1, final Synchronization pS2) { + return rawHasMatch(new Object[]{pS1, pS2}); + } + + /** + * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return the number of pattern matches found. + * + */ + public int countMatches(final Synchronization pS1, final Synchronization pS2) { + return rawCountMatches(new Object[]{pS1, pS2}); + } + + /** + * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. + * Neither determinism nor randomness of selection is guaranteed. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @param processor the action that will process the selected match. + * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked + * + */ + public boolean forOneArbitraryMatch(final Synchronization pS1, final Synchronization pS2, final Consumer processor) { + return rawForOneArbitraryMatch(new Object[]{pS1, pS2}, processor); + } + + /** + * Returns a new (partial) match. + * This can be used e.g. to call the matcher with a partial match. + *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. + * @param pS1 the fixed value of pattern parameter s1, or null if not bound. + * @param pS2 the fixed value of pattern parameter s2, or null if not bound. + * @return the (partial) match object. + * + */ + public TwoSynch.Match newMatch(final Synchronization pS1, final Synchronization pS2) { + return TwoSynch.Match.newMatch(pS1, pS2); + } + + /** + * Retrieve the set of values that occur in matches for s1. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs1(final Object[] parameters) { + return rawStreamAllValues(POSITION_S1, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs1() { + return rawStreamAllValuesOfs1(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs1() { + return rawStreamAllValuesOfs1(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for s1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs1(final TwoSynch.Match partialMatch) { + return rawStreamAllValuesOfs1(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for s1. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs1(final Synchronization pS2) { + return rawStreamAllValuesOfs1(new Object[]{null, pS2}); + } + + /** + * Retrieve the set of values that occur in matches for s1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs1(final TwoSynch.Match partialMatch) { + return rawStreamAllValuesOfs1(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s1. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs1(final Synchronization pS2) { + return rawStreamAllValuesOfs1(new Object[]{null, pS2}).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s2. + * @return the Set of all values or empty set if there are no matches + * + */ + protected Stream rawStreamAllValuesOfs2(final Object[] parameters) { + return rawStreamAllValues(POSITION_S2, parameters).map(Synchronization.class::cast); + } + + /** + * Retrieve the set of values that occur in matches for s2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs2() { + return rawStreamAllValuesOfs2(emptyArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs2() { + return rawStreamAllValuesOfs2(emptyArray()); + } + + /** + * Retrieve the set of values that occur in matches for s2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs2(final TwoSynch.Match partialMatch) { + return rawStreamAllValuesOfs2(partialMatch.toArray()); + } + + /** + * Retrieve the set of values that occur in matches for s2. + *

+ * NOTE: It is important not to modify the source model while the stream is being processed. + * If the match set of the pattern changes during processing, the contents of the stream is undefined. + * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. + * + * @return the Stream of all values or empty set if there are no matches + * + */ + public Stream streamAllValuesOfs2(final Synchronization pS1) { + return rawStreamAllValuesOfs2(new Object[]{pS1, null}); + } + + /** + * Retrieve the set of values that occur in matches for s2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs2(final TwoSynch.Match partialMatch) { + return rawStreamAllValuesOfs2(partialMatch.toArray()).collect(Collectors.toSet()); + } + + /** + * Retrieve the set of values that occur in matches for s2. + * @return the Set of all values or empty set if there are no matches + * + */ + public Set getAllValuesOfs2(final Synchronization pS1) { + return rawStreamAllValuesOfs2(new Object[]{pS1, null}).collect(Collectors.toSet()); + } + + @Override + protected TwoSynch.Match tupleToMatch(final Tuple t) { + try { + return TwoSynch.Match.newMatch((Synchronization) t.get(POSITION_S1), (Synchronization) t.get(POSITION_S2)); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in tuple not properly typed!",e); + return null; + } + } + + @Override + protected TwoSynch.Match arrayToMatch(final Object[] match) { + try { + return TwoSynch.Match.newMatch((Synchronization) match[POSITION_S1], (Synchronization) match[POSITION_S2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + @Override + protected TwoSynch.Match arrayToMatchMutable(final Object[] match) { + try { + return TwoSynch.Match.newMutableMatch((Synchronization) match[POSITION_S1], (Synchronization) match[POSITION_S2]); + } catch(ClassCastException e) { + LOGGER.error("Element(s) in array not properly typed!",e); + return null; + } + } + + /** + * @return the singleton instance of the query specification of this pattern + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static IQuerySpecification querySpecification() { + return TwoSynch.instance(); + } + } + + private TwoSynch() { + super(GeneratedPQuery.INSTANCE); + } + + /** + * @return the singleton instance of the query specification + * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded + * + */ + public static TwoSynch instance() { + try{ + return LazyHolder.INSTANCE; + } catch (ExceptionInInitializerError err) { + throw processInitializerError(err); + } + } + + @Override + protected TwoSynch.Matcher instantiate(final ViatraQueryEngine engine) { + return TwoSynch.Matcher.on(engine); + } + + @Override + public TwoSynch.Matcher instantiate() { + return TwoSynch.Matcher.create(); + } + + @Override + public TwoSynch.Match newEmptyMatch() { + return TwoSynch.Match.newEmptyMatch(); + } + + @Override + public TwoSynch.Match newMatch(final Object... parameters) { + return TwoSynch.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[1]); + } + + /** + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created + * not at the class load time of the outer class, + * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. + * + *

This workaround is required e.g. to support recursion. + * + */ + private static class LazyHolder { + private final static TwoSynch INSTANCE = new TwoSynch(); + + /** + * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. + * This initialization order is required to support indirect recursion. + * + *

The static initializer is defined using a helper field to work around limitations of the code generator. + * + */ + private final static Object STATIC_INITIALIZER = ensureInitialized(); + + public static Object ensureInitialized() { + INSTANCE.ensureInitializedInternal(); + return null; + } + } + + private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { + private final static TwoSynch.GeneratedPQuery INSTANCE = new GeneratedPQuery(); + + private final PParameter parameter_s1 = new PParameter("s1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final PParameter parameter_s2 = new PParameter("s2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT); + + private final List parameters = Arrays.asList(parameter_s1, parameter_s2); + + private GeneratedPQuery() { + super(PVisibility.PUBLIC); + } + + @Override + public String getFullyQualifiedName() { + return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch"; + } + + @Override + public List getParameterNames() { + return Arrays.asList("s1","s2"); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public Set doGetContainedBodies() { + setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); + Set bodies = new LinkedHashSet<>(); + { + PBody body = new PBody(this); + PVariable var_s1 = body.getOrCreateVariableByName("s1"); + PVariable var_s2 = body.getOrCreateVariableByName("s2"); + new TypeConstraint(body, Tuples.flatTupleOf(var_s1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + new TypeConstraint(body, Tuples.flatTupleOf(var_s2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + body.setSymbolicParameters(Arrays.asList( + new ExportedParameter(body, var_s1, parameter_s1), + new ExportedParameter(body, var_s2, parameter_s2) + )); + // Synchronization(s1) + new TypeConstraint(body, Tuples.flatTupleOf(var_s1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + // Synchronization(s2) + new TypeConstraint(body, Tuples.flatTupleOf(var_s2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization"))); + // s1 != s2 + new Inequality(body, var_s1, var_s2); + bodies.add(body); + } + { + PAnnotation annotation = new PAnnotation("Constraint"); + annotation.addAttribute("severity", "error"); + annotation.addAttribute("message", "error"); + annotation.addAttribute("key", Arrays.asList(new Object[] { + new ParameterReference("s1"), + new ParameterReference("s2") + })); + addAnnotation(annotation); + } + return bodies; + } + } +} 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql deleted file mode 100644 index 9af35b50..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql +++ /dev/null @@ -1,29 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries - -import epackage "http://www.eclipse.org/emf/2002/Ecore" - -pattern directSupertype(a: EClass, b:EClass) { - EClass.eSuperTypes(a,b); -} - -@Constraint(key={a}, severity="error", message="error") -pattern loopInInheritence(a: EClass) { - find directSupertype+(a,a); -} - -pattern opposite(a:EReference, b: EReference) { - EReference.eOpposite(a,b); -} -@Constraint(key={a}, severity="error", message="error") -pattern oppositeDifferentClass(a:EReference) { - EReference.eOpposite(a,b); - EReference.eContainingClass(a,aContaining); - EReference.eType(b,bTarget); - aContaining != bTarget; -} - -@Constraint(key={a}, severity="error", message="error") -pattern nonSymmetricOpposite(a:EReference, b:EReference) { - find opposite(a,b); - neg find opposite(b,a); -} \ No newline at end of file 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 { * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction_Type() * @model required="true" transient="true" changeable="false" volatile="true" derived="true" - * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type'" + * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type'" * @generated */ 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 { * @see #setModel(FunctionalArchitectureModel) * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Model() * @model required="true" transient="true" volatile="true" derived="true" - * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model'" + * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model'" * @generated */ 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 { (getFunctionalElement_Model(), source, new String[] { - "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model" + "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model" }); addAnnotation (getFunction_Type(), source, new String[] { - "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type" + "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type" }); } 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql deleted file mode 100644 index 02d34dcd..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql +++ /dev/null @@ -1,103 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries - -import "FamMetamodel" - -@Constraint(message="terminatorAndInformation", severity="error", key={T}) -pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { - FunctionalOutput.outgoingLinks(Out,I); - FunctionalOutput.terminator(Out,T); -} or { - InformationLink.to(I,In); - FunctionalInput.terminator(In,T); -} - -@QueryBasedFeature -pattern type(This : Function, Target : FunctionType) = { - find rootElements(_Model, This); - Target == FunctionType::Root; -} or { - neg find parent(_Child, This); - neg find rootElements(_Model, This); - Target == FunctionType::Leaf; -} or { - find parent(This, _Par); - find parent(_Child, This); - Target == FunctionType::Intermediate; -} - -pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = { - FunctionalArchitectureModel.rootElements(Model, Root); -} - -pattern parent(Func : Function, Par : Function) = { - Function.parent(Func, Par); -} - -@QueryBasedFeature -pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) { - FunctionalElement(This); - FunctionalArchitectureModel(Target); -} - -/* -@Constraint(message="noRoot", severity="error", key={fam}) -pattern noRoot(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasRoot(_); -} -@Constraint(message="noIntermediate", severity="error", key={fam}) -pattern noInt(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasInt(_); -} -@Constraint(message="noLeaf", severity="error", key={fam}) -pattern noLeaf(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasLeaf(_); -} -*/ - -/* -@QueryBasedFeature -pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = { - find parent+(This, Parent); - find rootElements(Target, Parent); -} or { - find rootElements(Target, This); -} - -pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = { - FunctionalInterface.data(FI, FD); -} - -@QueryBasedFeature -pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = { - find interfaceData(This, Target); -} - -@QueryBasedFeature -pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = { - find interfaceData(This, Target); -} - -@QueryBasedFeature -pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = { - FunctionalElement.interface.outputs(This, Output); - InformationLink.from(Target, Output); -} - -@QueryBasedFeature -pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = { - FunctionalElement.interface.inputs(This, Input); - InformationLink.to(Target, Input); -} - -@QueryBasedFeature -pattern connects(This : FunctionalElement, Target : FunctionalElement) = { - FunctionalElement.outgoingLinks(This,Link); - FunctionalElement.incomingLinks(Target,Link); -}*/ - -/*pattern frequency(a: Function, b : EInt) { - Function.minimumFrequency(a,b); -}*/ 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql deleted file mode 100644 index 269a4242..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql +++ /dev/null @@ -1,24 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries - -import epackage "FileSystemMetamodel" - -pattern patternContent(o1: FSObject, o2: FSObject) { - Dir.contents(o1,o2); -} - -@QueryBasedFeature -pattern live(this: FileSystem, l: FSObject) { - FileSystem.root(this,l); -} or { - FileSystem.root(this,root); - find patternContent+(root,l); -} - -@Constraint(key={child}, severity="error", message="error") -pattern contentInNotLive(parent : Dir, child: FSObject) { - Dir.contents(parent,child); - neg find live(_,parent); -} or { - Dir.contents(parent,child); - neg find live(_,child); -} 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql deleted file mode 100644 index 2e498670..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql +++ /dev/null @@ -1,270 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries - -import epackage "YakinduMetamodel" - -///////// -// Entry -///////// - -pattern entryInRegion_M0(r1 : Region, e1 : Entry) { - Region.vertices(r1, e1); -} -pattern entryInRegion_M1(r1 : Region, e1) { - Region.vertices(r1, e1); -} -pattern entryInRegion_M2(r1 : Region, e1: Entry) { - // For positive constraint - Region(r1);Entry(e1); -} - - -//@Constraint(severity="error", message="error", key = {r1}) -pattern noEntryInRegion_M0(r1 : Region) { - neg find entryInRegion_M0(r1, _); -} -pattern noEntryInRegion_M1(r1 : Region) { - neg find entryInRegion_M1(r1, _); -} -pattern noEntryInRegion_M2(r1 : Region) { - neg find entryInRegion_M2(r1, _); -} -pattern noEntryInRegion_M3(r1 : Region) { - find entryInRegion_M0(r1, _); -} -pattern noEntryInRegion_M4(r1 : Region) { - find entryInRegion_M1(r1, _); -} -pattern noEntryInRegion_M5(r1 : Region) { - find entryInRegion_M2(r1, _); -} - -//@Constraint(severity="error", message="error", key = {r}) -pattern multipleEntryInRegion_M0(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M1(r : Region) { - find entryInRegion_M1(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M2(r : Region) { - find entryInRegion_M2(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M3(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M1(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M4(r : Region) { - find entryInRegion_M2(r, e1); - find entryInRegion_M2(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M5(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M0(r, e2); -} - - -pattern transition_M0(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Transition.target(t, trg); -} -pattern transition_M1(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Vertex(trg); -} -pattern transition_M2(t : Transition, src : Vertex, trg : Vertex) { - Vertex(src); - Transition.target(t, trg); -} -pattern transition_M3(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t_x, src); - Transition.target(t, trg); -} -pattern transition_M4(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Transition.target(t_x, trg); -} - -//@Constraint(severity="error", message="error", key = {e}) -pattern incomingToEntry_M0(t : Transition, e : Entry) { - find transition_M0(t, _, e); -} -pattern incomingToEntry_1(t : Transition, e) { - find transition_M0(t, _, e); -} -pattern incomingToEntry_2(t : Transition, e : Entry) { - find transition_M1(t, _, e); -} -pattern incomingToEntry_3(t : Transition, e : Entry) { - find transition_M2(t, _, e); -} -pattern incomingToEntry_4(t : Transition, e : Entry) { - find transition_M3(t, _, e); -} -pattern incomingToEntry_5(t : Transition, e : Entry) { - find transition_M4(t, _, e); -} - -pattern noOutgoingTransitionFromEntry_M0(e : Entry) { - neg find transition_M0(_, e, _); -} - -pattern noOutgoingTransitionFromEntry_M1(e) { - Vertex(e); - neg find transition_M0(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M2(e : Entry) { - neg find transition_M1(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M3(e : Entry) { - neg find transition_M2(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M4(e : Entry) { - neg find transition_M3(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M5(e : Entry) { - neg find transition_M4(_, e, _); -} - - -//@Constraint(severity="error", message="error", key = {e}) -pattern multipleTransitionFromEntry_M0(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M1(e, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M2(e : Entry, t1 : Transition, t2: Transition) { - Transition(t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M3(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Transition(t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M4(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); -} - -///////// -// Exit -///////// - -//@Constraint(severity="error", message="error", key = {e}) -pattern outgoingFromExit_M0(t : Transition, e : Exit) { - Exit.outgoingTransitions(e,t); -} -pattern outgoingFromExit_M1(t : Transition, e) { - Vertex.outgoingTransitions(e,t); -} -pattern outgoingFromExit_M2(t : Transition, e : Exit) { - Transition(t); - Exit(e); -} - -///////// -// Final -///////// - -//@Constraint(severity="error", message="error", key = {f}) -pattern outgoingFromFinal_M0(t : Transition, f : FinalState) { - FinalState.outgoingTransitions(f,t); -} -pattern outgoingFromFinal_M1(t : Transition, f) { - Vertex.outgoingTransitions(f,t); -} -pattern outgoingFromFinal_M2(t : Transition, f : FinalState) { - Transition(t); - FinalState(f); -} - -///////// -// State vs Region -///////// - -//@Constraint(severity="error", message="error", key = {region}) -pattern noStateInRegion_M0(region: Region) { - neg find StateInRegion_M0(region,_); -} -pattern noStateInRegion_M1(region: Region) { - neg find StateInRegion_M1(region,_); -} -pattern noStateInRegion_M2(region: Region) { - neg find StateInRegion_M2(region,_); -} -pattern noStateInRegion_M3(region: Region) { - find StateInRegion_M0(region,_); -} - -pattern StateInRegion_M0(region: Region, state: State) { - Region.vertices(region,state); -} -pattern StateInRegion_M1(region: Region, state) { - Region.vertices(region,state); -} -pattern StateInRegion_M2(region: Region, state:State) { - Region(region);State(state); -} - -///////// -// Choice -///////// - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoOutgoing_M0(c : Choice) { - neg find transition_M0(_, c, _); -} -pattern choiceHasNoOutgoing_M1(c:Vertex) { - neg find transition_M0(_, c, _); -} -pattern choiceHasNoOutgoing_M2(c : Choice) { - neg find transition_M1(_, c, _); -} -pattern choiceHasNoOutgoing_M3(c : Choice) { - neg find transition_M2(_, c, _); -} -pattern choiceHasNoOutgoing_M4(c : Choice) { - neg find transition_M3(_, c, _); -} -pattern choiceHasNoOutgoing_M5(c : Choice) { - neg find transition_M4(_, c, _); -} -pattern choiceHasNoOutgoing_M6(c : Choice) { - find transition_M0(_, c, _); -} - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoIncoming_M0(c: Choice) { - neg find transition_M0(_, _, c); -} -pattern choiceHasNoIncoming_M1(c:Vertex) { - neg find transition_M0(_, _, c); -} -pattern choiceHasNoIncoming_M2(c: Choice) { - neg find transition_M1(_, _, c); -} -pattern choiceHasNoIncoming_M3(c: Choice) { - neg find transition_M2(_, _, c); -} -pattern choiceHasNoIncoming_M4(c: Choice) { - neg find transition_M3(_, _, c); -} -pattern choiceHasNoIncoming_M5(c: Choice) { - neg find transition_M4(_, _, c); -} -pattern choiceHasNoIncoming_M6(c: Choice) { - find transition_M0(_, _, c); -} 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/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql deleted file mode 100644 index 597b1691..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql +++ /dev/null @@ -1,227 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries - -import epackage "YakinduMetamodel" - -///////// -// Entry -///////// - -pattern entryInRegion(r1 : Region, e1 : Entry) { - Region.vertices(r1, e1); -} - -@Constraint(severity="error", message="error", key = {r1}) -pattern noEntryInRegion(r1 : Region) { - neg find entryInRegion(r1, _); -} - -@Constraint(severity="error", message="error", key = {r}) -pattern multipleEntryInRegion(r : Region) { - find entryInRegion(r, e1); - find entryInRegion(r, e2); - e1 != e2; -} - -pattern transition(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Transition.target(t, trg); -} - -@Constraint(severity="error", message="error", key = {e}) -pattern incomingToEntry(t : Transition, e : Entry) { - find transition(t, _, e); -} - -@Constraint(severity="error", message="error", key = {e}) -pattern noOutgoingTransitionFromEntry(e : Entry) { - neg find transition(_, e, _); -} - -@Constraint(severity="error", message="error", key = {e}) -pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} - -///////// -// Exit -///////// - -@Constraint(severity="error", message="error", key = {e}) -pattern outgoingFromExit(t : Transition, e : Exit) { - Exit.outgoingTransitions(e,t); -} - -///////// -// Final -///////// - -@Constraint(severity="error", message="error", key = {f}) -pattern outgoingFromFinal(t : Transition, f : FinalState) { - FinalState.outgoingTransitions(f,t); -} - -///////// -// State vs Region -///////// - -@Constraint(severity="error", message="error", key = {region}) -pattern noStateInRegion(region: Region) { - neg find StateInRegion(region,_); -} -pattern StateInRegion(region: Region, state: State) { - Region.vertices(region,state); -} - -///////// -// Choice -///////// - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoOutgoing(c : Choice) { - neg find transition(_, c, _); -} - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoIncoming(c: Choice) { - neg find transition(_, _, c); -} - -///////// -// Synchronization -///////// - -@Constraint(severity="error", message="error", key = {s}) -pattern synchHasNoOutgoing(s : Synchronization) { - neg find transition(_, s, _); -} - -@Constraint(severity="error", message="error", key = {s}) -pattern synchHasNoIncoming(s : Synchronization) { - neg find transition(_, _, s); -} - -@Constraint(severity="error", message="error", key = {s}) -pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) { - find transition(t1, v1, s); - find transition(t2, v2, s); - t1!=t2; - Region.vertices(r, v1); - Region.vertices(r, v2); -} or { - find transition(t1, s, v1); - find transition(t2, s, v2); - t1!=t2; - Region.vertices(r, v1); - Region.vertices(r, v2); -} - -@Constraint(severity="error", message="error", key = {s}) -pattern notSynchronizingStates(s : Synchronization) { - neg find hasMultipleOutgoingTrainsition(s); - neg find hasMultipleIncomingTrainsition(s); -} - -pattern hasMultipleOutgoingTrainsition(v : Synchronization) { - find transition(_, v, trg1); - find transition(_, v, trg2); - trg1 != trg2; -} - -pattern hasMultipleIncomingTrainsition(v : Synchronization) { - find transition(_, src1, v); - find transition(_, src2, v); - src1 != src2; -} - -@Constraint(severity="error", message="error", key = {s}) -pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) { - find transition(_, v1, s); - find transition(_, v2, s); - CompositeElement.regions.vertices(r1, v1); - CompositeElement.regions.vertices(r2, v2); - r1 != r2; -} or { - find transition(_, s, v1); - find transition(_, s, v2); - CompositeElement.regions.vertices(r1, v1); - CompositeElement.regions.vertices(r2, v2); - r1 != r2; -} - -/////////////////////////////// -// Extra -// -//@Constraint(severity="error", message="error", key = {s}) -//pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) { -// find transition(_, v, s); -// neg find child(_,v); -//} or { -// find transition(_, s, v); -// neg find child(_,v); -//} - -pattern child(parent: CompositeElement, child: Vertex) { - CompositeElement.regions.vertices(parent, child); -} - -@Constraint(severity="error", message="error", key = {s}) -pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) { - find transition(_, v, s); - find child(c,v); - neg find hasMultipleRegions(c); -} or { - find transition(_, s, v); - find child(c,v); - neg find hasMultipleRegions(c); -} - - -pattern hasMultipleRegions(composite: CompositeElement) { - CompositeElement.regions(composite,region1); - CompositeElement.regions(composite,region2); - region1 != region2; -} - -/** - * Simplifying model generation - */ -@Constraint(severity="error", message="error", key = {s}) -pattern synchThree(s: Synchronization) { - Transition.target(t1,s); - Transition.target(t2,s); - Transition.target(t3,s); - t1!=t2; - t2!=t3; - t1!=t3; -} or { - Transition.source(t1,s); - Transition.source(t2,s); - Transition.source(t3,s); - t1!=t2; - t2!=t3; - t1!=t3; -} - -/** - * Simplifying model generation - */ -@Constraint(severity="error", message="error", key = {s1,s2}) -pattern twoSynch(s1 : Synchronization, s2 : Synchronization) { - Synchronization(s1); - Synchronization(s2); - s1 != s2; -} - -/** - * Model generation task: at least one synch - */ -//@Constraint(severity="error", message="error", key = {s}) -//pattern noSynch(s:Statechart) { -// Statechart(s); -// neg find synch(_); -//} -//pattern synch(s:Synchronization) { -// Synchronization(s); -//} \ No newline at end of file -- cgit v1.2.3-54-g00ecf From fcb7e3a8e29d6def26b06decc504767c5864e5ca Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Sun, 17 Feb 2019 15:11:07 -0500 Subject: Commit before merge --- .../.classpath | 1 + .../.gitignore | 3 + .../META-INF/MANIFEST.MF | 3 +- .../build.properties | 3 - .../configs/ecore.vsconfig | 34 + .../configs/fam.vsconfig | 25 + .../configs/fileSystem.vsconfig | 25 + .../configs/yakindu.vsconfig | 25 + .../configurations/ecore.vsconfig | 34 - .../configurations/fam.vsconfig | 25 - .../configurations/fileSystem.vsconfig | 25 - .../configurations/yakindu.vsconfig | 25 - .../functionalPlugin.txt | 145 + .../metamodels/fam.ecore | 12 +- .../outputs/fam/debug/errors.txt | 458 +- .../fam/debug/generated3valued.vql_deactivated | 48584 ++++++------------- .../outputs/fam/debug/generation.logicproblem | 1969 +- .../outputs/fam/debug/init.partialmodel | 396 +- .../outputs/fam/debug/problem.als | 32 +- .../outputs/fam/log.txt | 2 +- .../outputs/fam/models/1.gml | 10018 +--- .../outputs/fam/models/1.png | Bin 159195 -> 68150 bytes .../outputs/fam/models/1.xmi | 19 +- .../outputs/fam/models/2.gml | 7091 +-- .../outputs/fam/models/2.png | Bin 177546 -> 64057 bytes .../outputs/fam/models/2.xmi | 19 +- .../outputs/fam/models/3.gml | 5921 ++- .../outputs/fam/models/3.png | Bin 177661 -> 64831 bytes .../outputs/fam/models/3.xmi | 20 +- .../outputs/fam/models/4.gml | 7403 ++- .../outputs/fam/models/4.png | Bin 189772 -> 80996 bytes .../outputs/fam/models/4.xmi | 17 +- .../outputs/fam/models/5.gml | 7507 ++- .../outputs/fam/models/5.png | Bin 194199 -> 66383 bytes .../outputs/fam/models/5.xmi | 16 +- .../outputs/fam/statistics.csv | 68 +- .../outputs/yakindu/debug/errors.txt | 66 +- .../yakindu/debug/generated3valued.vql_deactivated | 14693 +++--- .../outputs/yakindu/debug/generation.logicproblem | 1456 +- .../outputs/yakindu/debug/init.partialmodel | 49 +- .../outputs/yakindu/log.txt | 2 +- .../outputs/yakindu/models/1.gml | 11023 ++++- .../outputs/yakindu/models/1.png | Bin 33827 -> 127573 bytes .../outputs/yakindu/models/1.xmi | 22 +- .../outputs/yakindu/models/2.gml | 10733 +++- .../outputs/yakindu/models/2.png | Bin 29697 -> 116286 bytes .../outputs/yakindu/models/2.xmi | 21 +- .../outputs/yakindu/statistics.csv | 32 +- .../plugin.xml | 15 +- .../test/ecore/queries/ecorePatterns.vql | 14 +- .../standalone/test/fam/queries/famPatterns.vql | 103 - .../standalone/test/fam/queries/famSPatterns.vql | 13 + .../standalone/test/fam/queries/famXPatterns.vql | 103 + .../test/fam/queries/TerminatorAndInformation.java | 2 +- .../standalone/test/yakindu/queries/.gitignore | 24 + .../standalone/test/TestExecutionICSE.xtend | 22 + .../standalone/test/filesystem/FileSystem.java | 1 - .../test/filesystem/impl/FileSystemImpl.java | 19 +- .../filesystem/impl/filesystemPackageImpl.java | 18 - 59 files changed, 65914 insertions(+), 62442 deletions(-) create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/ecore.vsconfig create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fam.vsconfig create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fileSystem.vsconfig create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/yakindu.vsconfig delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/functionalPlugin.txt delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famSPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famXPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/TestExecutionICSE.xtend (limited to 'Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone') diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath index dbb1533f..5d01c425 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath @@ -1,6 +1,7 @@ + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.gitignore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.gitignore index ae3c1726..245e4e4c 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.gitignore +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.gitignore @@ -1 +1,4 @@ /bin/ +/xtend-gen/* +/src-gen/* +/outputs/* \ No newline at end of file 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 61135ac9..0b81cb7f 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 @@ -25,7 +25,8 @@ Require-Bundle: org.eclipse.viatra.addon.querybasedfeatures.runtime, org.eclipse.viatra.query.runtime;bundle-version="2.1.0", org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.0", org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.0", - org.eclipse.xtext.xbase.lib;bundle-version="2.12.0" + org.eclipse.xtext.xbase.lib;bundle-version="2.12.0", + hu.bme.mit.inf.dslreasoner.application;bundle-version="1.0.0" Import-Package: org.apache.log4j Automatic-Module-Name: ca.mcgill.ecse.dslreasoner.standalone.test Bundle-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 876d970c..e765de8d 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties @@ -1,8 +1,5 @@ bin.includes = META-INF/,\ - plugin.xml,\ - plugin.properties -jars.compile.order = . source.. = src/,\ src-gen/,\ queries/ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/ecore.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/ecore.vsconfig new file mode 100644 index 00000000..7f9d9caf --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/ecore.vsconfig @@ -0,0 +1,34 @@ +import epackage "http://www.eclipse.org/emf/2002/Ecore" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns" + +metamodel allSupported { package ecore excluding { + EClassifier.instanceClass,EClassifier.defaultValue,EEnumLiteral.instance,EStructuralFeature.defaultValue, + EJavaClass, EJavaObject, EJavaObject, + EPackage.eFactoryInstance, EFactory, EFactory.ePackage + } +} + +generate { + metamodel = allSupported + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries} + partial-model = { "platform:/resource/Ecore-Plugin/InitialPackage.ecore" } + solver = ViatraSolver + scope = { + #node += 5, + #string += { "A", "B" }, + #int += {0,1,-1} + } + + config = { + runtime = 10000, + log-level = normal + } + + number = 3 + runs = 1 + + debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/ecore/debug" + log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/ecore/log.txt" + output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/ecore/models" + statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/ecore/statistics.csv" +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fam.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fam.vsconfig new file mode 100644 index 00000000..8137ddf7 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fam.vsconfig @@ -0,0 +1,25 @@ +import epackage "FamMetamodel" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns" + +generate { + metamodel = { package fam } +// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries} +// partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/famInstance.xmi"} + solver = ViatraSolver + scope = { + #node = 10 + } + + config = { + runtime = 10000, + log-level = normal + } + + number = 5 + runs = 1 + + debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug" + log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt" + output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models" + statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv" +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fileSystem.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fileSystem.vsconfig new file mode 100644 index 00000000..ea95336b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/fileSystem.vsconfig @@ -0,0 +1,25 @@ +import epackage "FileSystemMetamodel" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns" + +generate { + metamodel = { package filesystem } + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries} + partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/filesystemInstance.xmi"} + solver = ViatraSolver + scope = { + # node = 10 + } + + config = { + runtime = 10000, + log-level = normal + } + + number = 5 + runs = 1 + + debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fileSystem/debug" + log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fileSystem/log.txt" + output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fileSystem/models" + statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fileSystem/statistics.csv" +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/yakindu.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/yakindu.vsconfig new file mode 100644 index 00000000..ff2038e0 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configs/yakindu.vsconfig @@ -0,0 +1,25 @@ +import epackage "YakinduMetamodel" +import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns" + +generate { + metamodel = { package yakindu } + constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries } + partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/yakinduInstance.xmi"} + solver = ViatraSolver + scope = { + #node = 10 + } + + config = { + runtime = 10000, + log-level = normal + } + + number = 5 + runs = 1 + + debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug" + log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt" + output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models" + statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv" +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig deleted file mode 100644 index 9360ab61..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig +++ /dev/null @@ -1,34 +0,0 @@ -import epackage "http://www.eclipse.org/emf/2002/Ecore" -import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns" - -metamodel allSupported { package ecore excluding { - EClassifier.instanceClass,EClassifier.defaultValue,EEnumLiteral.instance,EStructuralFeature.defaultValue, - EJavaClass, EJavaObject, EJavaObject, - EPackage.eFactoryInstance, EFactory, EFactory.ePackage - } -} - -generate { - metamodel = allSupported -// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries} - partial-model = { "platform:/resource/Ecore-Plugin/InitialPackage.ecore" } - solver = ViatraSolver - scope = { - #node += 5, - #string += { "A", "B" }, - #int += {0,1,-1} - } - - config = { - runtime = 10000, - log-level = normal - } - - number = 3 - runs = 1 - - debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug" - log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt" - output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models" - statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv" -} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig deleted file mode 100644 index d376dce8..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig +++ /dev/null @@ -1,25 +0,0 @@ -import epackage "FamMetamodel" -import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns" - -generate { - metamodel = { package fam } - constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries} - partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/famInstance.xmi"} - solver = ViatraSolver - scope = { - #node = 5 - } - - config = { - runtime = 10000, - log-level = normal - } - - number = 2 - runs = 1 - - debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug" - log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt" - output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models" - statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv" -} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig deleted file mode 100644 index 0e510a55..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig +++ /dev/null @@ -1,25 +0,0 @@ -import epackage "FileSystemMetamodel" -import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns" - -generate { - metamodel = { package filesystem } - constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries} - partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/filesystemInstance.xmi"} - solver = ViatraSolver - scope = { - #node = 5 - } - - config = { - runtime = 10000, - log-level = normal - } - - number = 2 - runs = 1 - - debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug" - log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt" - output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models" - statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv" -} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig deleted file mode 100644 index 423bf80e..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig +++ /dev/null @@ -1,25 +0,0 @@ -import epackage "YakinduMetamodel" -import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns" - -generate { - metamodel = { package yakindu } - constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries } - partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/yakinduInstance.xmi"} - solver = ViatraSolver - scope = { - #node = 6 - } - - config = { - runtime = 10000, - log-level = normal - } - - number = 2 - runs = 1 - - debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug" - log = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt" - output = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models" - statistics = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv" -} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/functionalPlugin.txt b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/functionalPlugin.txt new file mode 100644 index 00000000..ca86fe6b --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/functionalPlugin.txt @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 d9c8bfef..05023c15 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore @@ -8,11 +8,7 @@ - -

- - + volatile="true" transient="true" derived="true"/> @@ -24,11 +20,7 @@ - -
- - + changeable="false" volatile="true" transient="true" derived="true"/> (FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) @@ -26,122 +67,108 @@ Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalo hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): + hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder.Alloy2LogicMapper.transformOutput(Alloy2LogicMapper.java:53) + hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver.solve(AlloySolver.java:66) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.xyz.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.xyz.terminatorAndInformation contains errors. - org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) - org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) - org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:56) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) @@ -182,34 +209,6 @@ Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalo hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Unsupported attribute type: EJavaClass of org.eclipse.emf.ecore.impl.EcorePackageImpl@eddc9bb (name: ecore) (nsURI: http://www.eclipse.org/emf/2002/Ecore, nsPrefix: ecore)::EClassifier.instanceClass - hu.bme.mit.inf.dslreasoner.ecore2logic.EAttributeMapper_RelationsOverTypes.TypeOfRange(EAttributeMapper_RelationsOverTypes.java:237) - hu.bme.mit.inf.dslreasoner.ecore2logic.EAttributeMapper_RelationsOverTypes.transformEAttributes(EAttributeMapper_RelationsOverTypes.java:70) - hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.transformEAttributes(Ecore2Logic.java:140) - hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.transformMetamodel(Ecore2Logic.java:83) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:189) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): - hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108) - org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41) - com.google.common.collect.Iterators$6.computeNext(Iterators.java:617) - com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145) - com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140) - com.google.common.collect.Iterators.addAll(Iterators.java:366) - com.google.common.collect.Iterables.addAll(Iterables.java:332) - com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383) - org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592) - hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84) - hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213) - hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 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 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) @@ -234,36 +233,49 @@ Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalo hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - 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 - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) - hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - 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 - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) - hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException): - hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder.Alloy2LogicMapper.transformOutput(Alloy2LogicMapper.java:53) - hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver.solve(AlloySolver.java:66) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 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 @@ -274,36 +286,148 @@ Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalo hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - 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 - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) - hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) - hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - 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". -Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class] - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - 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". -Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class] - hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type contains errors. + org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144) + org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161) + org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26) + hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111) hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalArgumentException): Class FunctionalArchitectureModel is not translated to logic! + hu.bme.mit.inf.dslreasoner.ecore2logic.EClassMapper_AllElementAsObject.TypeofEClass(EClassMapper_AllElementAsObject.java:63) + hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.TypeofEClass(Ecore2Logic.java:96) + hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation.transform(InstanceModel2PartialInterpretation.java:99) + hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic.transform(InstanceModel2Logic.java:19) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:192) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) + org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NoSuchElementException): Cannot find entry with FQN ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model + org.eclipse.viatra.query.runtime.registry.impl.GlobalRegistryView.getEntry(GlobalRegistryView.java:56) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) + org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) + org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionalElementImpl.(FunctionalElementImpl.java:57) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.FunctionImpl.(FunctionImpl.java:64) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.createFunction(famFactoryImpl.java:125) + ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl.famFactoryImpl.create(famFactoryImpl.java:68) + hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) + hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 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 f02c64b0..7899a25f 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 @@ -105,22 +105,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -148,23 +148,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -193,20 +193,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -234,21 +234,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -277,20 +277,20 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -319,20 +319,20 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -360,23 +360,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -405,22 +405,22 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -449,24 +449,24 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -536,21 +536,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -610,7 +610,7 @@ private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model(problem,interpretation,source,target); } /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) @@ -619,7 +619,7 @@ private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model(problem,interpretation,source,target); } /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) @@ -1102,27 +1102,44 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []type attribute Function(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} ////////// // 1.3 Relation Definition Indexers ////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -1154,7 +1171,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); var_virtual1 == var_T; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -1186,7 +1203,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -1218,108 +1235,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); var_virtual1 == var_T; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries rootElements +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -1333,7 +1250,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); var_virtual0 == var_Root; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -1347,7 +1264,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); find mayEquivalent(problem, interpretation, var_virtual0, var_Root); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -1361,8 +1278,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); var_virtual0 == var_Root; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries parent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -1376,7 +1293,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); var_virtual0 == var_Par; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -1390,7 +1307,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); find mayEquivalent(problem, interpretation, var_virtual0, var_Par); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -1404,8 +1321,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); var_virtual0 == var_Par; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries model +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -1417,7 +1334,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -1429,7 +1346,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -1472,10 +1389,10 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } ////////// @@ -1492,14 +1409,23 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } ////////// @@ -1509,16 +1435,12 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_term ////////// private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ find interpretation(problem,interpretation); find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -1530,19 +1452,23 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -1553,33 +1479,49 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -1613,151 +1555,135 @@ pattern createObject_FunctionalInput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -1765,84 +1691,84 @@ pattern createObject_Function_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); -} -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); -} -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } ////////// @@ -1894,7 +1820,8 @@ pattern refineRelation_type_attribute_Function( find mustInstanceOfFunctionType_enum(problem,interpretation,to); find mayInRelationtype_attribute_Function(problem,interpretation,from,to); neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); -}import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" @@ -2000,23 +1927,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2044,23 +1971,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2088,21 +2015,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2130,20 +2057,20 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); @@ -2172,21 +2099,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2214,21 +2141,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2256,22 +2183,22 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); @@ -2300,23 +2227,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -2344,24 +2271,24 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); @@ -2432,21 +2359,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -2506,7 +2433,7 @@ private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model(problem,interpretation,source,target); } /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) @@ -2515,7 +2442,7 @@ private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model(problem,interpretation,source,target); } /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) @@ -2998,27 +2925,44 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []type attribute Function(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} ////////// // 1.3 Relation Definition Indexers ////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -3050,7 +2994,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); var_virtual1 == var_T; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -3082,7 +3026,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -3114,108 +3058,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); var_virtual1 == var_T; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries rootElements +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -3229,7 +3073,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); var_virtual0 == var_Root; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -3243,7 +3087,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); find mayEquivalent(problem, interpretation, var_virtual0, var_Root); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_rootElements( problem:LogicProblem, interpretation:PartialInterpretation, var_Model, var_Root) { @@ -3257,8 +3101,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); var_virtual0 == var_Root; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries parent +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -3272,7 +3116,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); var_virtual0 == var_Par; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -3286,7 +3130,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); find mayEquivalent(problem, interpretation, var_virtual0, var_Par); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_parent( problem:LogicProblem, interpretation:PartialInterpretation, var_Func, var_Par) { @@ -3300,8 +3144,8 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); var_virtual0 == var_Par; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries model +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -3313,7 +3157,7 @@ private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_tes find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -3325,7 +3169,7 @@ private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_model( problem:LogicProblem, interpretation:PartialInterpretation, var_This, var_Target) { @@ -3368,10 +3212,10 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } ////////// @@ -3388,14 +3232,23 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } ////////// @@ -3406,11 +3259,11 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_term private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -3418,11 +3271,11 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -3430,15 +3283,15 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -3449,63 +3302,45 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInterface_class( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -3555,6 +3390,66 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -3585,48 +3480,6 @@ pattern createObject_FAMTerminator_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -3661,83 +3514,83 @@ pattern createObject_FunctionalOutput_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } @@ -3898,22 +3751,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3942,10 +3795,10 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -3953,10 +3806,10 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -3986,20 +3839,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4028,20 +3881,20 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4070,20 +3923,20 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4112,20 +3965,20 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4153,23 +4006,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4197,22 +4050,22 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); @@ -4241,25 +4094,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -4330,9 +4183,9 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -4340,9 +4193,9 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -4399,21 +4252,38 @@ private pattern mayInRelationinterface_reference_FunctionalElement( /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ - private pattern mustInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ - private pattern mayInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ @@ -4895,504 +4765,189 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mustInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []type attribute Function(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } +private pattern mayInRelationtype_attribute_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} ////////// // 1.3 Relation Definition Indexers ////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_I); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -}or{ + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_In); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Root); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Par); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or - - { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or - - { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or - - { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or - - { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or - - { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); - find mustInstanceOfInformationLink_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -} -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -5442,105 +4997,135 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -5548,84 +5133,84 @@ pattern createObject_InformationLink_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } ////////// @@ -5784,23 +5369,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -5828,23 +5413,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -5872,21 +5457,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -5914,21 +5499,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -5956,21 +5541,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -5999,20 +5584,20 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6040,23 +5625,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6084,23 +5669,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6128,25 +5713,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6216,21 +5801,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -6286,21 +5871,38 @@ private pattern mayInRelationinterface_reference_FunctionalElement( /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ - private pattern mustInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ - private pattern mayInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ @@ -6782,346 +6384,43 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []type attribute Function(source,target) - */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_I); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_In); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Root); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Par); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } +////////// +// 1.3 Relation Definition Indexers +////////// + ////////// // 1.4 Containment Indexer ////////// @@ -7158,6 +6457,15 @@ private pattern mustTransitiveContains(source,target) { ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); @@ -7167,6 +6475,15 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries @@ -7180,19 +6497,19 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -7200,7 +6517,7 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -7208,11 +6525,11 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -7223,33 +6540,33 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -7283,33 +6600,45 @@ pattern createObject_FunctionalOutput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -7343,15 +6672,33 @@ pattern createObject_InformationLink_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -7401,118 +6748,88 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInterface_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); } ////////// @@ -7672,22 +6989,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7716,22 +7033,22 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7760,20 +7077,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7802,9 +7119,9 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); @@ -7812,9 +7129,9 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); @@ -7843,21 +7160,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7885,21 +7202,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7928,22 +7245,22 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -7971,23 +7288,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -8015,25 +7332,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -8104,20 +7421,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -8799,39 +8116,39 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -8842,6 +8159,36 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -8872,181 +8219,151 @@ pattern createObject_InformationLink_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -9054,84 +8371,84 @@ pattern createObject_FAMTerminator_class( ////////// // 4.2 Type refinement ////////// +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); +} pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); -} -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); -} -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } ////////// @@ -9290,23 +8607,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9334,23 +8651,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9378,21 +8695,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9420,21 +8737,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9462,21 +8779,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9504,21 +8821,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9546,22 +8863,22 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); @@ -9590,23 +8907,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9634,25 +8951,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9722,21 +9039,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -10418,39 +9735,39 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -10461,135 +9778,123 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -10639,33 +9944,45 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -10673,84 +9990,84 @@ pattern createObject_FAMTerminator_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// @@ -10909,23 +10226,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -10953,23 +10270,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -10997,21 +10314,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11039,21 +10356,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11081,21 +10398,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11123,21 +10440,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11165,23 +10482,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11209,23 +10526,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11253,25 +10570,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -11341,21 +10658,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -12037,15 +11354,15 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -12053,23 +11370,23 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -12080,79 +11397,15 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -12186,75 +11439,49 @@ pattern createObject_FAMTerminator_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -12288,88 +11515,178 @@ pattern createObject_FunctionalInterface_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); -} -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } ////////// @@ -12528,23 +11845,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12572,22 +11889,22 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -12616,21 +11933,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12658,21 +11975,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12700,21 +12017,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12742,21 +12059,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12784,23 +12101,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12828,23 +12145,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12872,25 +12189,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12960,21 +12277,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -13656,39 +12973,39 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -13699,211 +13016,211 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -13911,84 +13228,84 @@ pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); -} -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); -} -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } ////////// @@ -14147,23 +13464,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14191,23 +13508,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14235,21 +13550,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14277,21 +13592,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14319,21 +13634,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14361,21 +13676,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14403,23 +13718,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14447,23 +13762,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14491,25 +13806,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -14535,69 +13850,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -14649,21 +13901,38 @@ private pattern mayInRelationinterface_reference_FunctionalElement( /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ - private pattern mustInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ - private pattern mayInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ @@ -15145,91 +14414,44 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []type attribute Function(source,target) - */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_I); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_In); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, var_T, var_I) { @@ -15261,228 +14483,69 @@ private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_ find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); var_virtual1 == var_T; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + var_T, var_I) { find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); }or{ find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + var_T, var_I) { find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Root); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Par); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } ////////// @@ -15515,12 +14578,26 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 3. Unfinishedness Indexers ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); @@ -15530,10 +14607,24 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 4. Refinement Indexers @@ -15547,11 +14638,11 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -15559,15 +14650,11 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -15575,104 +14662,82 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -15706,91 +14771,109 @@ pattern createObject_FunctionalInterface_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -15798,84 +14881,84 @@ pattern createObject_InformationLink_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); } ////////// @@ -16034,22 +15117,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); @@ -16078,23 +15161,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16122,20 +15203,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); @@ -16164,21 +15245,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16206,21 +15287,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16248,21 +15329,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16290,23 +15371,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16334,23 +15415,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16378,25 +15459,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -16422,69 +15503,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -17162,23 +16180,15 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -17186,7 +16196,7 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -17194,72 +16204,74 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -17323,63 +16335,61 @@ pattern createObject_FAMTerminator_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -17417,84 +16427,84 @@ pattern createObject_FunctionalInterface_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } ////////// @@ -17653,22 +16663,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); @@ -17697,22 +16707,22 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -17741,21 +16751,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -17783,20 +16793,20 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); @@ -17826,9 +16836,9 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); @@ -17836,9 +16846,9 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); @@ -17867,21 +16877,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -17909,23 +16919,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -17953,23 +16963,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -17997,25 +17007,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18085,20 +17095,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -18781,39 +17791,39 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -18824,154 +17834,6 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalOutput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -19002,6 +17864,124 @@ pattern createObject_InformationLink_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -19032,87 +18012,117 @@ pattern createObject_FunctionalInterface_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } @@ -19272,23 +18282,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19316,23 +18326,23 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19360,21 +18370,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19402,21 +18412,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19444,21 +18454,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19486,21 +18496,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19528,23 +18538,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19572,23 +18582,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19616,25 +18626,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -19705,20 +18715,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(pro find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -20323,6 +19333,103 @@ private pattern mayInRelationtype_attribute_Function( ////////// // 1.3 Relation Definition Indexers ////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} ////////// // 1.4 Containment Indexer @@ -20354,6 +19461,11 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 3. Unfinishedness Indexers @@ -20391,6 +19503,11 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 4. Refinement Indexers @@ -20400,39 +19517,39 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -20443,33 +19560,45 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -20519,6 +19648,96 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -20549,190 +19768,88 @@ pattern createObject_FunctionalOutput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); -} -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } ////////// @@ -20891,23 +20008,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -20935,23 +20052,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -20979,21 +20094,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21021,21 +20136,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21063,21 +20178,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21105,21 +20220,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21147,23 +20262,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21191,23 +20306,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21235,25 +20350,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -21279,69 +20394,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -21393,21 +20445,38 @@ private pattern mayInRelationinterface_reference_FunctionalElement( /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ - private pattern mustInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ - private pattern mayInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target); - } +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ @@ -21889,346 +20958,43 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []type attribute Function(source,target) - */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target); - } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_I); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_In); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Root); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Par); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } +////////// +// 1.3 Relation Definition Indexers +////////// + ////////// // 1.4 Containment Indexer ////////// @@ -22259,17 +21025,21 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); -} ////////// // 3. Unfinishedness Indexers ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); @@ -22279,15 +21049,19 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I); -} ////////// // 4. Refinement Indexers @@ -22297,11 +21071,7 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_term private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -22309,11 +21079,11 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -22321,52 +21091,90 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ +} +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_FAMTerminator_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -22416,75 +21224,63 @@ pattern createObject_Function_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -22518,118 +21314,88 @@ pattern createObject_FunctionalOutput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); -} -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } ////////// @@ -22788,23 +21554,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -22832,23 +21598,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -22876,21 +21640,21 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -22918,21 +21682,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -22960,21 +21724,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -23002,21 +21766,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -23044,23 +21808,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -23088,23 +21852,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -23132,25 +21896,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -23176,69 +21940,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -23290,21 +21991,38 @@ private pattern mayInRelationinterface_reference_FunctionalElement( /** * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ - private pattern mustInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(problem,interpretation,source,target); - } +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} /** - * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ - private pattern mayInRelationmodel_reference_FunctionalElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(problem,interpretation,source,target); - } +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ @@ -23786,346 +22504,43 @@ private pattern mayInRelationinterface_reference_FunctionalData( /** * Matcher for detecting tuples t where []type attribute Function(source,target) */ - private pattern mustInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []type attribute Function(source,target) - */ - private pattern mayInRelationtype_attribute_Function( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(problem,interpretation,source,target); - } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz terminatorAndInformation -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_I); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mayInstanceOfInformationLink_class(problem,interpretation,var_I); - find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_In); - find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - find mayEquivalent(problem, interpretation, var_virtual1, var_T); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation( - problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); - find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); - var_virtual0 == var_I; - find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - // T is exported - // I is exported - find mustInstanceOfInformationLink_class(problem,interpretation,var_I); - find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); - var_virtual0 == var_In; - find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); - find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); - find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); - var_virtual1 == var_T; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz type -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par); - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par); - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - find mayEquivalent(problem, interpretation, var_Target, var_virtual0); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This); - var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType); - var_Target == var_virtual0; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_This); - // type constraint is enforced by construction - // This is exported - // Target is exported - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par); - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This); - var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType); - var_Target == var_virtual0; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz rootElements -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Root); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Model, var_Root) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInstanceOfFunction_class(problem,interpretation,var_Root); - // Model is exported - // Root is exported - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model); - find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Root; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz parent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mayInstanceOfFunction_class(problem,interpretation,var_Func); - find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mayInstanceOfFunction_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_Par); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_Func, var_Par) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInstanceOfFunction_class(problem,interpretation,var_Par); - // Func is exported - // Par is exported - find mustInstanceOfFunction_class(problem,interpretation,var_Func); - find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0); - find mustInstanceOfFunction_class(problem,interpretation,var_virtual0); - var_virtual0 == var_Par; -} -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz model -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model( - problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - var_This, var_Target) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); - // This is exported - // Target is exported - find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } +////////// +// 1.3 Relation Definition Indexers +////////// + ////////// // 1.4 Containment Indexer ////////// @@ -24156,17 +22571,21 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem,interpretation,var_T,var_I); -} ////////// // 3. Unfinishedness Indexers ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); @@ -24176,15 +22595,19 @@ pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicPr check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, - var_T, var_I) -{ - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem,interpretation,var_T,var_I); -} ////////// // 4. Refinement Indexers @@ -24196,29 +22619,17 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find interpretation(problem,interpretation); find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -24230,98 +22641,74 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -24355,63 +22742,61 @@ pattern createObject_FunctionalOutput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -24445,88 +22830,118 @@ pattern createObject_FunctionalInput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); -} -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } +pattern createObject_FunctionalInterface_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } ////////// @@ -24686,22 +23101,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24729,23 +23144,21 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24773,20 +23186,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); @@ -24815,21 +23228,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24857,21 +23270,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24899,21 +23312,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24941,23 +23354,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -24985,23 +23398,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -25029,25 +23442,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -25073,69 +23486,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -25813,11 +24163,7 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -25829,19 +24175,19 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -25849,11 +24195,7 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); } pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( @@ -25932,33 +24274,75 @@ pattern createObject_FAMTerminator_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalArchitectureModel_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_InformationLink_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -25992,75 +24376,33 @@ pattern createObject_FunctionalInterface_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_InformationLink_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -26072,79 +24414,79 @@ pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:Partial find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } @@ -26282,1130 +24624,620 @@ private pattern isPrimitive(element: PrimitiveElement) { // 1.1.2 domain-specific Type Indexers ////////// /** - * An element must be an instance of type "EAttribute class". + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); + Type.name(type,"FunctionalElement class"); } /** - * An element may be an instance of type "EAttribute class". + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * An element must be an instance of type "EAnnotation class". + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); + Type.name(type,"FunctionalArchitectureModel class"); } /** - * An element may be an instance of type "EAnnotation class". + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClass class". + * An element must be an instance of type "Function class". */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); + Type.name(type,"Function class"); } /** - * An element may be an instance of type "EClass class". + * An element may be an instance of type "Function class". */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClassifier class". + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); + Type.name(type,"FAMTerminator class"); } /** - * An element may be an instance of type "EClassifier class". + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * An element must be an instance of type "EDataType class". + * An element must be an instance of type "InformationLink class". */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); + Type.name(type,"InformationLink class"); } /** - * An element may be an instance of type "EDataType class". + * An element may be an instance of type "InformationLink class". */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnum class". + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); + Type.name(type,"FunctionalInterface class"); } /** - * An element may be an instance of type "EEnum class". + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnumLiteral class". + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); + Type.name(type,"FunctionalInput class"); } /** - * An element may be an instance of type "EEnumLiteral class". + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * An element must be an instance of type "EModelElement class". + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); + Type.name(type,"FunctionalOutput class"); } /** - * An element may be an instance of type "EModelElement class". + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * An element must be an instance of type "ENamedElement class". + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); + Type.name(type,"FunctionalData class"); } /** - * An element may be an instance of type "ENamedElement class". + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * An element must be an instance of type "EObject class". + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); + Type.name(type,"FunctionType enum"); } /** - * An element may be an instance of type "EObject class". + * An element may be an instance of type "FunctionType enum". */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } /** - * An element must be an instance of type "EOperation class". + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); } /** - * An element may be an instance of type "EOperation class". + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } /** - * An element must be an instance of type "EPackage class". + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); } /** - * An element may be an instance of type "EPackage class". + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * An element must be an instance of type "EParameter class". + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EParameter class". + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EReference class". + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EReference class". + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EStructuralFeature class". + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EStructuralFeature class". + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypedElement class". - */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } - /** - * An element may be an instance of type "ETypedElement class". + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStringToStringMapEntry class". - */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); -} - -/** - * An element may be an instance of type "EStringToStringMapEntry class". - */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EGenericType class". - */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); -} - -/** - * An element may be an instance of type "EGenericType class". - */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypeParameter class". - */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); -} - -/** - * An element may be an instance of type "ETypeParameter class". - */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class UndefinedPart". - */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class UndefinedPart". - */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) - */ -private pattern mustInRelationeAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationeAttributeType_reference_EAttribute( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27414,33 +25246,34 @@ private pattern mayInRelationeAttributeType_reference_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationdetails_reference_EAnnotation( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationdetails_reference_EAnnotation( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27449,34 +25282,38 @@ private pattern mayInRelationdetails_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationeModelElement_reference_EAnnotation( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationeModelElement_reference_EAnnotation( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27485,38 +25322,42 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationcontents_reference_EAnnotation( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationcontents_reference_EAnnotation( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27525,65 +25366,38 @@ private pattern mayInRelationcontents_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) - */ -private pattern mustInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) - */ -private pattern mayInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); -} or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationeSuperTypes_reference_EClass( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationeSuperTypes_reference_EClass( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27592,29 +25406,33 @@ private pattern mayInRelationeSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationeOperations_reference_EClass( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationeOperations_reference_EClass( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27623,11 +25441,11 @@ private pattern mayInRelationeOperations_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -27635,181 +25453,26 @@ private pattern mayInRelationeOperations_reference_EClass( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) - */ -private pattern mustInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) - */ -private pattern mayInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) - */ -private pattern mustInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) - */ -private pattern mayInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) - */ -private pattern mustInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) - */ -private pattern mayInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationeAllOperations_reference_EClass( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationeAllOperations_reference_EClass( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27818,29 +25481,42 @@ private pattern mayInRelationeAllOperations_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27849,29 +25525,33 @@ private pattern mayInRelationeAllStructuralFeatures_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27880,29 +25560,38 @@ private pattern mayInRelationeAllSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationeIDAttribute_reference_EClass( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationeIDAttribute_reference_EClass( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27911,46 +25600,15 @@ private pattern mayInRelationeIDAttribute_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -27958,26 +25616,26 @@ private pattern mayInRelationeStructuralFeatures_reference_EClass( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -27986,34 +25644,38 @@ private pattern mayInRelationeGenericSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -28022,895 +25684,1060 @@ private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) - */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) - */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) - */ -private pattern mustInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) - */ -private pattern mayInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) - */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) - */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) - */ -private pattern mustInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) - */ -private pattern mayInRelationeAnnotations_reference_EModelElement( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EOperation( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EOperation( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EOperation( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EOperation( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) - */ -private pattern mustInRelationeParameters_reference_EOperation( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) - */ -private pattern mayInRelationeParameters_reference_EOperation( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeExceptions_reference_EOperation( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeExceptions_reference_EOperation( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); -} or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) - */ -private pattern mustInRelationeClassifiers_reference_EPackage( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) - */ -private pattern mayInRelationeClassifiers_reference_EPackage( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) - */ -private pattern mustInRelationeSubpackages_reference_EPackage( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) - */ -private pattern mayInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) - */ -private pattern mustInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) - */ -private pattern mayInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) - */ -private pattern mustInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) - */ -private pattern mayInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) - */ -private pattern mustInRelationeReferenceType_reference_EReference( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) - */ -private pattern mayInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); } or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); } -/** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) - */ -private pattern mustInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -/** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) - */ -private pattern mayInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + * An element must be an instance of type "Function class". */ -private pattern mustInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); } + /** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); } + /** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + * An element may be an instance of type "InformationLink class". */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); } + /** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); } + /** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mustInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); } + /** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); +} + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); } + +/** + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationeLowerBound_reference_EGenericType( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationeLowerBound_reference_EGenericType( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -28919,38 +26746,42 @@ private pattern mayInRelationeLowerBound_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -28959,33 +26790,33 @@ private pattern mayInRelationeTypeParameter_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationeClassifier_reference_EGenericType( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationeClassifier_reference_EGenericType( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -28994,33 +26825,38 @@ private pattern mayInRelationeClassifier_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationeBounds_reference_ETypeParameter( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationeBounds_reference_ETypeParameter( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29029,34 +26865,34 @@ private pattern mayInRelationeBounds_reference_ETypeParameter( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationiD_attribute_EAttribute( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationiD_attribute_EAttribute( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29065,33 +26901,38 @@ private pattern mayInRelationiD_attribute_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationsource_attribute_EAnnotation( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationsource_attribute_EAnnotation( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29100,33 +26941,42 @@ private pattern mayInRelationsource_attribute_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationabstract_attribute_EClass( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationabstract_attribute_EClass( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29135,33 +26985,38 @@ private pattern mayInRelationabstract_attribute_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationinterface_attribute_EClass( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationinterface_attribute_EClass( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29170,33 +27025,33 @@ private pattern mayInRelationinterface_attribute_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29205,33 +27060,38 @@ private pattern mayInRelationinstanceClassName_attribute_EClassifier( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29240,33 +27100,42 @@ private pattern mayInRelationinstanceTypeName_attribute_EClassifier( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationserializable_attribute_EDataType( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationserializable_attribute_EDataType( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29275,33 +27144,33 @@ private pattern mayInRelationserializable_attribute_EDataType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29310,68 +27179,38 @@ private pattern mayInRelationvalue_attribute_EEnumLiteral( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationname_attribute_ENamedElement( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationname_attribute_ENamedElement( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29380,33 +27219,42 @@ private pattern mayInRelationname_attribute_ENamedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationnsURI_attribute_EPackage( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationnsURI_attribute_EPackage( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29415,33 +27263,38 @@ private pattern mayInRelationnsURI_attribute_EPackage( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationnsPrefix_attribute_EPackage( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationnsPrefix_attribute_EPackage( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -29450,2286 +27303,2026 @@ private pattern mayInRelationnsPrefix_attribute_EPackage( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); } -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) - */ -private pattern mayInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationderived_attribute_EStructuralFeature( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationderived_attribute_EStructuralFeature( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) - */ -private pattern mustInRelationordered_attribute_ETypedElement( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) - */ -private pattern mayInRelationordered_attribute_ETypedElement( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) - */ -private pattern mustInRelationunique_attribute_ETypedElement( + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) - */ -private pattern mayInRelationunique_attribute_ETypedElement( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + * An element must be an instance of type "Function class". */ -private pattern mustInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); } + /** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + * An element must be an instance of type "InformationLink class". */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); } + /** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + * An element may be an instance of type "InformationLink class". */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); } -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); } -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); } -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_EAttribute_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EAnnotation_class( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( +/** + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + */ +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EReference_class( +/** + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) + */ +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EObject_class_by_contents_reference_EAnnotation( +/** + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) + */ +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EObject_class( +/** + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) + */ +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EParameter_class( +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EPackage_class_UndefinedPart( +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } -pattern createObject_EEnum_class( +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } -pattern createObject_EEnumLiteral_class( +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern createObject_EGenericType_class( +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } -pattern createObject_EOperation_class( +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } -pattern createObject_EDataType_class( +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } -pattern createObject_EClass_class( +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } ////////// -// 4.2 Type refinement +// 1.3 Relation Definition Indexers ////////// -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} ////////// -// 4.3 Relation refinement +// 1.4 Containment Indexer ////////// -pattern refineRelation_eAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_references_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); } -pattern refineRelation_eSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -pattern refineRelation_eAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eExceptions_reference_EOperation( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eOpposite_reference_EReference( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eReferenceType_reference_EReference( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eKeys_reference_EReference( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eType_reference_ETypedElement( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eRawType_reference_EGenericType( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eTypeParameter_reference_EGenericType( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_eClassifier_reference_EGenericType( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_iD_attribute_EAttribute( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_source_attribute_EAnnotation( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_abstract_attribute_EClass( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_interface_attribute_EClass( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_instanceClassName_attribute_EClassifier( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_instanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_serializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_value_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineRelation_literal_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_name_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_nsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_nsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } -pattern refineRelation_containment_attribute_EReference( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -pattern refineRelation_container_attribute_EReference( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -pattern refineRelation_resolveProxies_attribute_EReference( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_changeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_volatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_transient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_required_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_key_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" @@ -31837,22 +29430,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); @@ -31881,22 +29474,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -32010,8 +29601,8 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); @@ -32020,8 +29611,8 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); @@ -32051,9 +29642,9 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); @@ -32061,9 +29652,9 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); @@ -32095,8 +29686,8 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); @@ -32106,8 +29697,8 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); @@ -32137,23 +29728,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -32181,24 +29772,24 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); @@ -32225,69 +29816,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -32965,11 +30493,11 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -32977,36 +30505,74 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ +} +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, @@ -33098,121 +30664,75 @@ pattern createObject_FAMTerminator_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -33220,14 +30740,25 @@ pattern createObject_FunctionalOutput_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); +} +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } @@ -33235,10 +30766,10 @@ pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation: find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } @@ -33248,55 +30779,44 @@ pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:Pa find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); -} -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } @@ -33456,23 +30976,23 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33501,22 +31021,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33545,20 +31063,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33586,21 +31104,21 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33629,20 +31147,20 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33670,21 +31188,21 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33712,23 +31230,23 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33756,23 +31274,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33800,25 +31318,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -33844,69 +31362,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -34507,6 +31962,103 @@ private pattern mayInRelationtype_attribute_Function( ////////// // 1.3 Relation Definition Indexers ////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} ////////// // 1.4 Containment Indexer @@ -34538,6 +32090,11 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 3. Unfinishedness Indexers @@ -34575,6 +32132,11 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 4. Refinement Indexers @@ -34584,11 +32146,11 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -34596,64 +32158,72 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ +} +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -34687,91 +32257,105 @@ pattern createObject_FunctionalOutput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); - find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); - find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_InformationLink_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); - find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -34805,118 +32389,88 @@ pattern createObject_FunctionalInput_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FAMTerminator_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunction_class(problem,interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunction_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } ////////// @@ -35053,1130 +32607,436 @@ private pattern isPrimitive(element: PrimitiveElement) { // 1.1.2 domain-specific Type Indexers ////////// /** - * An element must be an instance of type "EAttribute class". + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); + Type.name(type,"FunctionalElement class"); } /** - * An element may be an instance of type "EAttribute class". + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * An element must be an instance of type "EAnnotation class". + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); + Type.name(type,"FunctionalArchitectureModel class"); } /** - * An element may be an instance of type "EAnnotation class". + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClass class". + * An element must be an instance of type "Function class". */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); + Type.name(type,"Function class"); } /** - * An element may be an instance of type "EClass class". + * An element may be an instance of type "Function class". */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClassifier class". + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); + Type.name(type,"FAMTerminator class"); } /** - * An element may be an instance of type "EClassifier class". + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * An element must be an instance of type "EDataType class". + * An element must be an instance of type "InformationLink class". */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); + Type.name(type,"InformationLink class"); } /** - * An element may be an instance of type "EDataType class". + * An element may be an instance of type "InformationLink class". */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnum class". + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); + Type.name(type,"FunctionalInterface class"); } /** - * An element may be an instance of type "EEnum class". + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnumLiteral class". + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); + Type.name(type,"FunctionalInput class"); } /** - * An element may be an instance of type "EEnumLiteral class". + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * An element must be an instance of type "EModelElement class". + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); + Type.name(type,"FunctionalOutput class"); } /** - * An element may be an instance of type "EModelElement class". + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * An element must be an instance of type "ENamedElement class". + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); + Type.name(type,"FunctionalData class"); } /** - * An element may be an instance of type "ENamedElement class". + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EObject class". - */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); -} - -/** - * An element may be an instance of type "EObject class". - */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EOperation class". - */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); -} - -/** - * An element may be an instance of type "EOperation class". - */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class". - */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); -} - -/** - * An element may be an instance of type "EPackage class". - */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EParameter class". - */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); -} - -/** - * An element may be an instance of type "EParameter class". - */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EReference class". - */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); -} - -/** - * An element may be an instance of type "EReference class". - */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStructuralFeature class". - */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); -} - -/** - * An element may be an instance of type "EStructuralFeature class". - */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypedElement class". - */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); -} - -/** - * An element may be an instance of type "ETypedElement class". - */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStringToStringMapEntry class". - */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); -} - -/** - * An element may be an instance of type "EStringToStringMapEntry class". - */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EGenericType class". - */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); -} - -/** - * An element may be an instance of type "EGenericType class". - */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypeParameter class". - */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); -} - -/** - * An element may be an instance of type "ETypeParameter class". - */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * An element must be an instance of type "EPackage class UndefinedPart". + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); + Type.name(type,"FunctionType enum"); } /** - * An element may be an instance of type "EPackage class UndefinedPart". + * An element may be an instance of type "FunctionType enum". */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers ////////// /** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationeAttributeType_reference_EAttribute( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationeAttributeType_reference_EAttribute( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36185,33 +33045,42 @@ private pattern mayInRelationeAttributeType_reference_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationdetails_reference_EAnnotation( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationdetails_reference_EAnnotation( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36220,34 +33089,33 @@ private pattern mayInRelationdetails_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationeModelElement_reference_EAnnotation( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationeModelElement_reference_EAnnotation( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36256,11 +33124,11 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents @@ -36268,26 +33136,26 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationcontents_reference_EAnnotation( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationcontents_reference_EAnnotation( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36296,34 +33164,34 @@ private pattern mayInRelationcontents_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationreferences_reference_EAnnotation( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationreferences_reference_EAnnotation( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36332,29 +33200,38 @@ private pattern mayInRelationreferences_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationeSuperTypes_reference_EClass( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationeSuperTypes_reference_EClass( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36363,29 +33240,42 @@ private pattern mayInRelationeSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationeOperations_reference_EClass( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationeOperations_reference_EClass( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36394,38 +33284,38 @@ private pattern mayInRelationeOperations_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationeAllAttributes_reference_EClass( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationeAllAttributes_reference_EClass( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36434,29 +33324,33 @@ private pattern mayInRelationeAllAttributes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationeAllReferences_reference_EClass( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationeAllReferences_reference_EClass( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36465,29 +33359,38 @@ private pattern mayInRelationeAllReferences_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationeReferences_reference_EClass( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationeReferences_reference_EClass( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36496,29 +33399,42 @@ private pattern mayInRelationeReferences_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationeAttributes_reference_EClass( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationeAttributes_reference_EClass( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36527,29 +33443,33 @@ private pattern mayInRelationeAttributes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationeAllContainments_reference_EClass( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationeAllContainments_reference_EClass( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36558,60 +33478,38 @@ private pattern mayInRelationeAllContainments_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) - */ -private pattern mustInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) - */ -private pattern mayInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36620,29 +33518,42 @@ private pattern mayInRelationeAllStructuralFeatures_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36651,29 +33562,38 @@ private pattern mayInRelationeAllSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationeIDAttribute_reference_EClass( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationeIDAttribute_reference_EClass( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -36682,780 +33602,1094 @@ private pattern mayInRelationeIDAttribute_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -/** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); -} or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) - */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) - */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) - */ -private pattern mustInRelationeLiterals_reference_EEnum( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) - */ -private pattern mayInRelationeLiterals_reference_EEnum( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) - */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) - */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) - */ -private pattern mustInRelationeAnnotations_reference_EModelElement( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) - */ -private pattern mayInRelationeAnnotations_reference_EModelElement( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EOperation( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EOperation( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EOperation( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EOperation( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) - */ -private pattern mustInRelationeParameters_reference_EOperation( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) - */ -private pattern mayInRelationeParameters_reference_EOperation( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); -} or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) - */ -private pattern mustInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) - */ -private pattern mayInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) - */ -private pattern mustInRelationeSubpackages_reference_EPackage( +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) - */ -private pattern mayInRelationeSubpackages_reference_EPackage( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) - */ -private pattern mustInRelationeSuperPackage_reference_EPackage( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) - */ -private pattern mayInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + LogicProblem.elements(problem,element); } or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) - */ -private pattern mustInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); } -/** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) - */ -private pattern mayInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); } or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); } -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Function class". + */ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FAMTerminator class". + */ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); +} + +/** + * An element may be an instance of type "FAMTerminator class". + */ +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); +} + +/** + * An element may be an instance of type "InformationLink class". + */ +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); +} + +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); +} + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37464,38 +34698,42 @@ private pattern mayInRelationeContainingClass_reference_EStructuralFeature( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); + neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationeType_reference_ETypedElement( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationeType_reference_ETypedElement( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37504,33 +34742,33 @@ private pattern mayInRelationeType_reference_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationeGenericType_reference_ETypedElement( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationeGenericType_reference_ETypedElement( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37539,38 +34777,38 @@ private pattern mayInRelationeGenericType_reference_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationeUpperBound_reference_EGenericType( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationeUpperBound_reference_EGenericType( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37579,38 +34817,34 @@ private pattern mayInRelationeUpperBound_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37619,34 +34853,38 @@ private pattern mayInRelationeTypeArguments_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationeRawType_reference_EGenericType( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationeRawType_reference_EGenericType( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37655,33 +34893,42 @@ private pattern mayInRelationeRawType_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationeLowerBound_reference_EGenericType( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationeLowerBound_reference_EGenericType( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37690,38 +34937,38 @@ private pattern mayInRelationeLowerBound_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37730,33 +34977,33 @@ private pattern mayInRelationeTypeParameter_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationeClassifier_reference_EGenericType( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationeClassifier_reference_EGenericType( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37765,69 +35012,38 @@ private pattern mayInRelationeClassifier_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) - */ -private pattern mustInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) - */ -private pattern mayInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationiD_attribute_EAttribute( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationiD_attribute_EAttribute( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37836,33 +35052,42 @@ private pattern mayInRelationiD_attribute_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationsource_attribute_EAnnotation( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationsource_attribute_EAnnotation( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37871,33 +35096,33 @@ private pattern mayInRelationsource_attribute_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationabstract_attribute_EClass( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationabstract_attribute_EClass( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37906,33 +35131,38 @@ private pattern mayInRelationabstract_attribute_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationinterface_attribute_EClass( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationinterface_attribute_EClass( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37941,33 +35171,42 @@ private pattern mayInRelationinterface_attribute_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -37976,33 +35215,38 @@ private pattern mayInRelationinstanceClassName_attribute_EClassifier( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -38011,733 +35255,1094 @@ private pattern mayInRelationinstanceTypeName_attribute_EClassifier( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) - */ -private pattern mustInRelationserializable_attribute_EDataType( + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) - */ -private pattern mayInRelationserializable_attribute_EDataType( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -/** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) - */ -private pattern mustInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } -/** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) - */ -private pattern mayInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) - */ -private pattern mustInRelationnsURI_attribute_EPackage( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) - */ -private pattern mayInRelationnsURI_attribute_EPackage( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) - */ -private pattern mustInRelationnsPrefix_attribute_EPackage( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) - */ -private pattern mayInRelationnsPrefix_attribute_EPackage( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) - */ -private pattern mayInRelationresolveProxies_attribute_EReference( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) - */ -private pattern mustInRelationordered_attribute_ETypedElement( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) - */ -private pattern mayInRelationordered_attribute_ETypedElement( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) - */ -private pattern mustInRelationunique_attribute_ETypedElement( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) - */ -private pattern mayInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); } or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); } -/** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); } or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); } -/** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -/** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); +} + +/** + * An element may be an instance of type "FunctionalArchitectureModel class". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Function class". + */ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); +} + +/** + * An element may be an instance of type "Function class". + */ +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FAMTerminator class". + */ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); +} + +/** + * An element may be an instance of type "FAMTerminator class". + */ +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } +/** + * An element must be an instance of type "InformationLink class". + */ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); +} + +/** + * An element may be an instance of type "InformationLink class". + */ +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInterface class". + */ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); +} + +/** + * An element may be an instance of type "FunctionalInterface class". + */ +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalInput class". + */ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); +} + +/** + * An element may be an instance of type "FunctionalInput class". + */ +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalOutput class". + */ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); +} + +/** + * An element may be an instance of type "FunctionalOutput class". + */ +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalData class". + */ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); +} + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationrequired_attribute_ETypedElement( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationrequired_attribute_ETypedElement( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -38746,33 +36351,42 @@ private pattern mayInRelationrequired_attribute_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -38781,33 +36395,33 @@ private pattern mayInRelationkey_attribute_EStringToStringMapEntry( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -38816,740 +36430,814 @@ private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } -pattern createObject_EAnnotation_class( +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } -pattern createObject_EClass_class( +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_EEnum_class( +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_EReference_class( +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern createObject_EOperation_class( +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class( +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EPackage_class_UndefinedPart( +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EStringToStringMapEntry_class( +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } -pattern createObject_EObject_class_by_contents_reference_EAnnotation( +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EObject_class( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EGenericType_class( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EParameter_class( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EAttribute_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EEnumLiteral_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_EDataType_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -39557,1010 +37245,195 @@ pattern createObject_EDataType_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); -} - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_eAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineRelation_references_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineRelation_eSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineRelation_eAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineRelation_eAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -pattern refineRelation_eReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } -pattern refineRelation_eAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); } -pattern refineRelation_eAllContainments_reference_EClass( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -pattern refineRelation_eAllOperations_reference_EClass( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -pattern refineRelation_eAllStructuralFeatures_reference_EClass( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -pattern refineRelation_eAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); } -pattern refineRelation_eIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + LogicProblem.elements(problem,element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); } -pattern refineRelation_eExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); } -pattern refineRelation_eOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -pattern refineRelation_eReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_eRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_iD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_source_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_abstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_interface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_instanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_instanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_serializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_literal_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_name_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); -} -pattern refineRelation_nsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_nsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_containment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_container_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_resolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_changeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_volatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_transient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_required_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_key_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); -} - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; -} - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); -} - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); LogicProblem.types(problem,type); TypeDefinition.elements(type,element); @@ -40586,1130 +37459,436 @@ private pattern isPrimitive(element: PrimitiveElement) { // 1.1.2 domain-specific Type Indexers ////////// /** - * An element must be an instance of type "EAttribute class". + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); + Type.name(type,"FunctionalElement class"); } /** - * An element may be an instance of type "EAttribute class". + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * An element must be an instance of type "EAnnotation class". + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); + Type.name(type,"FunctionalArchitectureModel class"); } /** - * An element may be an instance of type "EAnnotation class". + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClass class". + * An element must be an instance of type "Function class". */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); + Type.name(type,"Function class"); } /** - * An element may be an instance of type "EClass class". + * An element may be an instance of type "Function class". */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClassifier class". + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); + Type.name(type,"FAMTerminator class"); } /** - * An element may be an instance of type "EClassifier class". + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * An element must be an instance of type "EDataType class". + * An element must be an instance of type "InformationLink class". */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); + Type.name(type,"InformationLink class"); } /** - * An element may be an instance of type "EDataType class". + * An element may be an instance of type "InformationLink class". */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnum class". + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); + Type.name(type,"FunctionalInterface class"); } /** - * An element may be an instance of type "EEnum class". + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnumLiteral class". + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); + Type.name(type,"FunctionalInput class"); } /** - * An element may be an instance of type "EEnumLiteral class". + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class". - */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); -} - -/** - * An element may be an instance of type "EModelElement class". - */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class". - */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); -} - -/** - * An element may be an instance of type "ENamedElement class". - */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EObject class". - */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); -} - -/** - * An element may be an instance of type "EObject class". - */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EOperation class". - */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); -} - -/** - * An element may be an instance of type "EOperation class". - */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class". - */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); -} - -/** - * An element may be an instance of type "EPackage class". - */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EParameter class". - */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); -} - -/** - * An element may be an instance of type "EParameter class". - */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EReference class". - */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); -} - -/** - * An element may be an instance of type "EReference class". - */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStructuralFeature class". - */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); -} - -/** - * An element may be an instance of type "EStructuralFeature class". - */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypedElement class". - */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); -} - -/** - * An element may be an instance of type "ETypedElement class". - */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStringToStringMapEntry class". - */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); -} - -/** - * An element may be an instance of type "EStringToStringMapEntry class". - */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EGenericType class". - */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); -} - -/** - * An element may be an instance of type "EGenericType class". - */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypeParameter class". - */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); -} - -/** - * An element may be an instance of type "ETypeParameter class". - */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * An element must be an instance of type "EModelElement class UndefinedPart". + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); + Type.name(type,"FunctionalOutput class"); } /** - * An element may be an instance of type "EModelElement class UndefinedPart". + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * An element must be an instance of type "ENamedElement class UndefinedPart". + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); + Type.name(type,"FunctionalData class"); } /** - * An element may be an instance of type "ENamedElement class UndefinedPart". + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * An element must be an instance of type "EPackage class UndefinedPart". + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); + Type.name(type,"FunctionType enum"); } /** - * An element may be an instance of type "EPackage class UndefinedPart". + * An element may be an instance of type "FunctionType enum". */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers ////////// /** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationeAttributeType_reference_EAttribute( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationeAttributeType_reference_EAttribute( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41718,33 +37897,42 @@ private pattern mayInRelationeAttributeType_reference_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationdetails_reference_EAnnotation( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationdetails_reference_EAnnotation( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41753,34 +37941,33 @@ private pattern mayInRelationdetails_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationeModelElement_reference_EAnnotation( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationeModelElement_reference_EAnnotation( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41789,11 +37976,11 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents @@ -41801,26 +37988,26 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationcontents_reference_EAnnotation( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationcontents_reference_EAnnotation( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41829,34 +38016,34 @@ private pattern mayInRelationcontents_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationreferences_reference_EAnnotation( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationreferences_reference_EAnnotation( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41865,29 +38052,38 @@ private pattern mayInRelationreferences_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationeSuperTypes_reference_EClass( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationeSuperTypes_reference_EClass( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41896,29 +38092,42 @@ private pattern mayInRelationeSuperTypes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationeOperations_reference_EClass( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationeOperations_reference_EClass( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41927,38 +38136,38 @@ private pattern mayInRelationeOperations_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationeAllAttributes_reference_EClass( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationeAllAttributes_reference_EClass( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41967,29 +38176,33 @@ private pattern mayInRelationeAllAttributes_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationeAllReferences_reference_EClass( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationeAllReferences_reference_EClass( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -41998,29 +38211,38 @@ private pattern mayInRelationeAllReferences_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationeReferences_reference_EClass( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationeReferences_reference_EClass( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42029,366 +38251,42 @@ private pattern mayInRelationeReferences_reference_EClass( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) - */ -private pattern mustInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) - */ -private pattern mayInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) - */ -private pattern mustInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) - */ -private pattern mayInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); -} or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); -} or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) - */ -private pattern mustInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) - */ -private pattern mayInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); -} or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) - */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) - */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42397,34 +38295,33 @@ private pattern mayInRelationeTypeParameters_reference_EClassifier( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationeLiterals_reference_EEnum( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationeLiterals_reference_EEnum( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42433,11 +38330,11 @@ private pattern mayInRelationeLiterals_reference_EEnum( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -42445,26 +38342,26 @@ private pattern mayInRelationeLiterals_reference_EEnum( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42473,51 +38370,15 @@ private pattern mayInRelationeEnum_reference_EEnumLiteral( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) - */ -private pattern mustInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) - */ -private pattern mayInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -42525,26 +38386,26 @@ private pattern mayInRelationeAnnotations_reference_EModelElement( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationeContainingClass_reference_EOperation( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationeContainingClass_reference_EOperation( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42553,11 +38414,11 @@ private pattern mayInRelationeContainingClass_reference_EOperation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents @@ -42565,26 +38426,26 @@ private pattern mayInRelationeContainingClass_reference_EOperation( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationeTypeParameters_reference_EOperation( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationeTypeParameters_reference_EOperation( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -42593,14513 +38454,2305 @@ private pattern mayInRelationeTypeParameters_reference_EOperation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) - */ -private pattern mustInRelationeParameters_reference_EOperation( + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) - */ -private pattern mayInRelationeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeExceptions_reference_EOperation( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); -} or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -/** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -/** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) - */ -private pattern mustInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); } -/** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) - */ -private pattern mayInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) - */ -private pattern mustInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -/** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) - */ -private pattern mayInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } -/** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) - */ -private pattern mustInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) - */ -private pattern mayInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) - */ -private pattern mustInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) - */ -private pattern mayInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); } -/** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) - */ -private pattern mustInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) - */ -private pattern mayInRelationeReferenceType_reference_EReference( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) - */ -private pattern mustInRelationeKeys_reference_EReference( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) - */ -private pattern mayInRelationeKeys_reference_EReference( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) - */ -private pattern mustInRelationeType_reference_ETypedElement( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) - */ -private pattern mayInRelationeType_reference_ETypedElement( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) - */ -private pattern mustInRelationeGenericType_reference_ETypedElement( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) - */ -private pattern mayInRelationeGenericType_reference_ETypedElement( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) - */ -private pattern mustInRelationeUpperBound_reference_EGenericType( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) - */ -private pattern mayInRelationeUpperBound_reference_EGenericType( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) - */ -private pattern mustInRelationeRawType_reference_EGenericType( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) - */ -private pattern mayInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) - */ -private pattern mustInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) - */ -private pattern mayInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) - */ -private pattern mustInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) - */ -private pattern mayInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) - */ -private pattern mustInRelationeBounds_reference_ETypeParameter( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) - */ -private pattern mayInRelationeBounds_reference_ETypeParameter( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) - */ -private pattern mustInRelationiD_attribute_EAttribute( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) - */ -private pattern mayInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); } or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) - */ -private pattern mustInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); } -/** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) - */ -private pattern mayInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); } or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); } -/** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) - */ -private pattern mustInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -/** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) - */ -private pattern mayInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) + * An element must be an instance of type "Function class". */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); } + /** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) - */ -private pattern mustInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) - */ -private pattern mayInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) - */ -private pattern mustInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) - */ -private pattern mayInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) - */ -private pattern mustInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) - */ -private pattern mayInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) + * An element must be an instance of type "InformationLink class". */ -private pattern mayInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); } -/** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); } + /** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + * An element may be an instance of type "InformationLink class". */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); } -/** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); } + /** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalInput class". */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); } -/** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); } + /** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mayInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); } -/** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) - */ -private pattern mustInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); } + /** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) - */ -private pattern mustInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalData class". */ -private pattern mayInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) - */ -private pattern mustInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) - */ -private pattern mayInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) - */ -private pattern mustInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) - */ -private pattern mayInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) -{ - find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -} -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class_by_contents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EReference_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EDataType_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); -} -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); -} - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_eAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_references_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_eSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); -} -pattern refineRelation_eOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_eRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_iD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_source_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_abstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_interface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_instanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_instanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_serializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_literal_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_name_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); -} -pattern refineRelation_nsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_nsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_containment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_container_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_resolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_changeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_volatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_transient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_required_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_key_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); -} - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; -} - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); -} - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { - find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); -} - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); -} - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "EAttribute class". - */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); -} - -/** - * An element may be an instance of type "EAttribute class". - */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EAnnotation class". - */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); -} - -/** - * An element may be an instance of type "EAnnotation class". - */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EClass class". - */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); -} - -/** - * An element may be an instance of type "EClass class". - */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EClassifier class". - */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); -} - -/** - * An element may be an instance of type "EClassifier class". - */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EDataType class". - */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); -} - -/** - * An element may be an instance of type "EDataType class". - */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EEnum class". - */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); -} - -/** - * An element may be an instance of type "EEnum class". - */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EEnumLiteral class". - */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); -} - -/** - * An element may be an instance of type "EEnumLiteral class". - */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class". - */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); -} - -/** - * An element may be an instance of type "EModelElement class". - */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class". - */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); -} - -/** - * An element may be an instance of type "ENamedElement class". - */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EObject class". - */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); -} - -/** - * An element may be an instance of type "EObject class". - */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EOperation class". - */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); -} - -/** - * An element may be an instance of type "EOperation class". - */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class". - */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); -} - -/** - * An element may be an instance of type "EPackage class". - */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EParameter class". - */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); -} - -/** - * An element may be an instance of type "EParameter class". - */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EReference class". - */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); -} - -/** - * An element may be an instance of type "EReference class". - */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStructuralFeature class". - */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); -} - -/** - * An element may be an instance of type "EStructuralFeature class". - */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypedElement class". - */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); -} - -/** - * An element may be an instance of type "ETypedElement class". - */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStringToStringMapEntry class". - */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); -} - -/** - * An element may be an instance of type "EStringToStringMapEntry class". - */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EGenericType class". - */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); -} - -/** - * An element may be an instance of type "EGenericType class". - */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypeParameter class". - */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); -} - -/** - * An element may be an instance of type "ETypeParameter class". - */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class UndefinedPart". - */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class UndefinedPart". - */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) - */ -private pattern mustInRelationeAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) - */ -private pattern mayInRelationeAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) - */ -private pattern mustInRelationdetails_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) - */ -private pattern mayInRelationdetails_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) - */ -private pattern mustInRelationeModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) - */ -private pattern mayInRelationeModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) - */ -private pattern mustInRelationcontents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) - */ -private pattern mayInRelationcontents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) - */ -private pattern mustInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) - */ -private pattern mayInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); -} or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) - */ -private pattern mustInRelationeOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) - */ -private pattern mayInRelationeOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) - */ -private pattern mustInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) - */ -private pattern mayInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) - */ -private pattern mustInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) - */ -private pattern mayInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) - */ -private pattern mustInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) - */ -private pattern mayInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) - */ -private pattern mustInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) - */ -private pattern mayInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); -} or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); -} or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) - */ -private pattern mustInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) - */ -private pattern mayInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); -} or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) - */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) - */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) - */ -private pattern mustInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) - */ -private pattern mayInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) - */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) - */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) - */ -private pattern mustInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) - */ -private pattern mayInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) - */ -private pattern mustInRelationeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) - */ -private pattern mayInRelationeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); -} or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) - */ -private pattern mustInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) - */ -private pattern mayInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) - */ -private pattern mustInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) - */ -private pattern mayInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) - */ -private pattern mustInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) - */ -private pattern mayInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) - */ -private pattern mustInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) - */ -private pattern mayInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) - */ -private pattern mustInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) - */ -private pattern mayInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) - */ -private pattern mustInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) - */ -private pattern mayInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) - */ -private pattern mustInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) - */ -private pattern mayInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) - */ -private pattern mustInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) - */ -private pattern mayInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) - */ -private pattern mustInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) - */ -private pattern mayInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) - */ -private pattern mustInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) - */ -private pattern mayInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) - */ -private pattern mustInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) - */ -private pattern mayInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) - */ -private pattern mustInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) - */ -private pattern mayInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) - */ -private pattern mustInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) - */ -private pattern mayInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) - */ -private pattern mustInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) - */ -private pattern mayInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) - */ -private pattern mustInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) - */ -private pattern mayInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) - */ -private pattern mustInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) - */ -private pattern mayInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) - */ -private pattern mustInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) - */ -private pattern mayInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) - */ -private pattern mustInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) - */ -private pattern mayInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) - */ -private pattern mustInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) - */ -private pattern mayInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) - */ -private pattern mustInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) - */ -private pattern mayInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) - */ -private pattern mustInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) - */ -private pattern mayInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) - */ -private pattern mayInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) - */ -private pattern mustInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) - */ -private pattern mayInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) - */ -private pattern mustInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) - */ -private pattern mayInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) - */ -private pattern mustInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) - */ -private pattern mayInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) - */ -private pattern mustInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) - */ -private pattern mayInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) -{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -} -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EDataType_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class_by_contents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EReference_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); -} -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); -} - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_eAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_references_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_eSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); -} -pattern refineRelation_eExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); -} -pattern refineRelation_eOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); -} -pattern refineRelation_eType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_eRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_iD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_source_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_abstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_interface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_instanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_instanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); -} -pattern refineRelation_serializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_literal_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); -} -pattern refineRelation_name_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); -} -pattern refineRelation_nsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_nsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); -} -pattern refineRelation_containment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_container_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_resolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); -} -pattern refineRelation_changeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_volatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_transient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); -} -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_required_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); -} -pattern refineRelation_key_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -pattern refineRelation_value_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); -} - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; -} - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); -} - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { - find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); -} - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); -} - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "EAttribute class". - */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); -} - -/** - * An element may be an instance of type "EAttribute class". - */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EAnnotation class". - */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); -} - -/** - * An element may be an instance of type "EAnnotation class". - */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EClass class". - */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); -} - -/** - * An element may be an instance of type "EClass class". - */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EClassifier class". - */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); -} - -/** - * An element may be an instance of type "EClassifier class". - */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EDataType class". - */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); -} - -/** - * An element may be an instance of type "EDataType class". - */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EEnum class". - */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); -} - -/** - * An element may be an instance of type "EEnum class". - */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EEnumLiteral class". - */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); -} - -/** - * An element may be an instance of type "EEnumLiteral class". - */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class". - */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); -} - -/** - * An element may be an instance of type "EModelElement class". - */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class". - */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); -} - -/** - * An element may be an instance of type "ENamedElement class". - */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EObject class". - */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); -} - -/** - * An element may be an instance of type "EObject class". - */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EOperation class". - */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); -} - -/** - * An element may be an instance of type "EOperation class". - */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class". - */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); -} - -/** - * An element may be an instance of type "EPackage class". - */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EParameter class". - */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); -} - -/** - * An element may be an instance of type "EParameter class". - */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EReference class". - */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); -} - -/** - * An element may be an instance of type "EReference class". - */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStructuralFeature class". - */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); -} - -/** - * An element may be an instance of type "EStructuralFeature class". - */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypedElement class". - */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); -} - -/** - * An element may be an instance of type "ETypedElement class". - */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EStringToStringMapEntry class". - */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); -} - -/** - * An element may be an instance of type "EStringToStringMapEntry class". - */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EGenericType class". - */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); -} - -/** - * An element may be an instance of type "EGenericType class". - */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } -/** - * An element must be an instance of type "ETypeParameter class". - */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); -} - -/** - * An element may be an instance of type "ETypeParameter class". - */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "EModelElement class UndefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); -} - -/** - * An element may be an instance of type "ENamedElement class UndefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class UndefinedPart". - */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); -} - -/** - * An element may be an instance of type "EPackage class UndefinedPart". - */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) - */ -private pattern mustInRelationeAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) - */ -private pattern mayInRelationeAttributeType_reference_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) - */ -private pattern mustInRelationdetails_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) - */ -private pattern mayInRelationdetails_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) - */ -private pattern mustInRelationeModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) - */ -private pattern mayInRelationeModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) - */ -private pattern mustInRelationcontents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) - */ -private pattern mayInRelationcontents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) - */ -private pattern mustInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) - */ -private pattern mayInRelationreferences_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); -} or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) - */ -private pattern mustInRelationeOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) - */ -private pattern mayInRelationeOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAllAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) - */ -private pattern mustInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) - */ -private pattern mayInRelationeAllReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) - */ -private pattern mustInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) - */ -private pattern mayInRelationeReferences_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAttributes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) - */ -private pattern mustInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) - */ -private pattern mayInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) - */ -private pattern mustInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) - */ -private pattern mayInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); -} or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); -} or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) - */ -private pattern mustInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) - */ -private pattern mayInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); -} or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) - */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) - */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) - */ -private pattern mustInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) - */ -private pattern mayInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) - */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) - */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) - */ -private pattern mustInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) - */ -private pattern mayInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) - */ -private pattern mustInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) - */ -private pattern mayInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) - */ -private pattern mustInRelationeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) - */ -private pattern mayInRelationeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); -} or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) - */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) - */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) - */ -private pattern mustInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) - */ -private pattern mayInRelationeClassifiers_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) - */ -private pattern mustInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) - */ -private pattern mayInRelationeSubpackages_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) - */ -private pattern mustInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) - */ -private pattern mayInRelationeSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) - */ -private pattern mustInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) - */ -private pattern mayInRelationeOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) - */ -private pattern mustInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) - */ -private pattern mayInRelationeReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) - */ -private pattern mustInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) - */ -private pattern mayInRelationeKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) - */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) - */ -private pattern mustInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) - */ -private pattern mayInRelationeType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) - */ -private pattern mustInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) - */ -private pattern mayInRelationeGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) - */ -private pattern mustInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) - */ -private pattern mayInRelationeUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) - */ -private pattern mustInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) - */ -private pattern mayInRelationeRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) - */ -private pattern mustInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) - */ -private pattern mayInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) - */ -private pattern mustInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) - */ -private pattern mayInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) - */ -private pattern mustInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) - */ -private pattern mayInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) - */ -private pattern mustInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) - */ -private pattern mayInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) - */ -private pattern mustInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) - */ -private pattern mayInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) - */ -private pattern mustInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) - */ -private pattern mayInRelationabstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) - */ -private pattern mustInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) - */ -private pattern mayInRelationinterface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) - */ -private pattern mustInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) - */ -private pattern mayInRelationserializable_attribute_EDataType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) - */ -private pattern mustInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) - */ -private pattern mayInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) - */ -private pattern mustInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) - */ -private pattern mayInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) - */ -private pattern mustInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) - */ -private pattern mayInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) - */ -private pattern mayInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) - */ -private pattern mustInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) - */ -private pattern mayInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) - */ -private pattern mustInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) - */ -private pattern mayInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) - */ -private pattern mustInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) - */ -private pattern mayInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) - */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) - */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) - */ -private pattern mustInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) - */ -private pattern mayInRelationmany_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) - */ -private pattern mustInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) - */ -private pattern mayInRelationrequired_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) - */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) -{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -} -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EClass_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); } -pattern createObject_EOperation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + +/** + * An element may be an instance of type "FunctionalData class". + */ +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionType enum". + */ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_EReference_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } -pattern createObject_EObject_class_by_contents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + +/** + * An element may be an instance of type "FunctionType enum". + */ +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_EObject_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class DefinedPart"); } -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + +/** + * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_EEnumLiteral_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); } -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +/** + * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". + */ +private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class( + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EDataType_class( +/** + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) + */ +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) + */ +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( +/** + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) + */ +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( +/** + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) + */ +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( +/** + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( +/** + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } -pattern createObject_EGenericType_class( +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } -pattern createObject_EStringToStringMapEntry_class( +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_ETypeParameter_class( +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_eAttributeType_reference_EAttribute( +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_references_reference_EAnnotation( +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern refineRelation_eSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllAttributes_reference_EClass( +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern refineRelation_eAllReferences_reference_EClass( +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eReferences_reference_EClass( +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } -pattern refineRelation_eAttributes_reference_EClass( +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllContainments_reference_EClass( +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } -pattern refineRelation_eAllOperations_reference_EClass( +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllStructuralFeatures_reference_EClass( +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } -pattern refineRelation_eAllSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eIDAttribute_reference_EClass( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eExceptions_reference_EOperation( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -pattern refineRelation_eOpposite_reference_EReference( + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -pattern refineRelation_eReferenceType_reference_EReference( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); } -pattern refineRelation_eKeys_reference_EReference( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_T, var_I) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; } -pattern refineRelation_eType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) { + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_iD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_source_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_abstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_interface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_instanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -pattern refineRelation_instanceTypeName_attribute_EClassifier( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_serializable_attribute_EDataType( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_value_attribute_EEnumLiteral( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_literal_attribute_EEnumLiteral( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_name_attribute_ENamedElement( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_nsURI_attribute_EPackage( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_nsPrefix_attribute_EPackage( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_containment_attribute_EReference( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_container_attribute_EReference( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_resolveProxies_attribute_EReference( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_changeable_attribute_EStructuralFeature( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_volatile_attribute_EStructuralFeature( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_transient_attribute_EStructuralFeature( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( +pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } -pattern refineRelation_required_attribute_ETypedElement( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -pattern refineRelation_key_attribute_EStringToStringMapEntry( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -pattern refineRelation_value_attribute_EStringToStringMapEntry( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" @@ -57207,22 +40860,22 @@ private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, inter { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); @@ -57251,22 +40904,20 @@ private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProb { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); @@ -57295,20 +40946,20 @@ private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); @@ -57337,9 +40988,9 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); @@ -57347,9 +40998,9 @@ private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpret } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); @@ -57379,21 +41030,21 @@ private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or @@ -57421,20 +41072,20 @@ private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, int { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); @@ -57463,22 +41114,22 @@ private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); @@ -57507,23 +41158,23 @@ private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or @@ -57551,25 +41202,25 @@ private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpre { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or @@ -57595,69 +41246,6 @@ private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpr */ private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find mustInstanceOfFunctionType_enum(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class DefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FunctionalArchitectureModel class UndefinedPart"); -} - -/** - * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart". - */ -private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); } ////////// // 1.2 Relation Declaration Indexers @@ -58258,6 +41846,103 @@ private pattern mayInRelationtype_attribute_Function( ////////// // 1.3 Relation Definition Indexers ////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam queries terminatorAndInformation +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_I); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mayInstanceOfInformationLink_class(problem,interpretation,var_I); + find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_In); + find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_T); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation( + problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0); + find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0); + var_virtual0 == var_I; + find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T); + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + // T is exported + // I is exported + find mustInstanceOfInformationLink_class(problem,interpretation,var_I); + find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0); + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0); + var_virtual0 == var_In; + find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1); + find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1); + var_virtual1 == var_T; +} ////////// // 1.4 Containment Indexer @@ -58289,6 +41974,11 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 3. Unfinishedness Indexers @@ -58326,6 +42016,11 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation, + var_T, var_I) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_queries_terminatorAndInformation(problem,interpretation,var_T,var_I); +} ////////// // 4. Refinement Indexers @@ -58335,15 +42030,15 @@ pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustInstanceOfInformationLink_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunction_class(problem,interpretation,root); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -58351,19 +42046,15 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfInformationLink_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustInstanceOfFunction_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -58371,158 +42062,184 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); find mustExist(problem, interpretation, root); -}or{ +} +pattern createObject_FunctionalArchitectureModel_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ find interpretation(problem,interpretation); - find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalOutput_class( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); - find mustInstanceOfFunctionalData_class(problem,interpretation,container); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); - find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FAMTerminator_class( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); - find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); - find mustInstanceOfFunctionalElement_class(problem,interpretation,container); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); - find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInterface_class( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); - find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalArchitectureModel_class_UndefinedPart( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart"); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); - find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); - find mustInstanceOfFunction_class(problem,interpretation,container); - find mayInstanceOfFunction_class(problem,interpretation,newObject); - find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Function_class( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); - find mayInstanceOfFunction_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -58556,118 +42273,88 @@ pattern createObject_InformationLink_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); - find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FunctionalInput_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); - find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); -} -pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); - neg find mustInstanceOfInformationLink_class(problem,interpretation,element); -} -pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunction_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); - neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); +} +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); neg find mustInstanceOfInformationLink_class(problem,interpretation,element); - neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } ////////// @@ -58804,1130 +42491,869 @@ private pattern isPrimitive(element: PrimitiveElement) { // 1.1.2 domain-specific Type Indexers ////////// /** - * An element must be an instance of type "EAttribute class". + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAttribute class"); +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAttribute class"); + Type.name(type,"FunctionalElement class"); } /** - * An element may be an instance of type "EAttribute class". + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEAttribute_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAttribute_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * An element must be an instance of type "EAnnotation class". + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EAnnotation class"); +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EAnnotation class"); + Type.name(type,"FunctionalArchitectureModel class"); } /** - * An element may be an instance of type "EAnnotation class". + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEAnnotation_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClass class". + * An element must be an instance of type "Function class". */ -private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClass class"); +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClass class"); + Type.name(type,"Function class"); } /** - * An element may be an instance of type "EClass class". + * An element may be an instance of type "Function class". */ -private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEClass_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClass_class(problem,interpretation,element); } +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * An element must be an instance of type "EClassifier class". + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EClassifier class"); +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EClassifier class"); + Type.name(type,"FAMTerminator class"); } /** - * An element may be an instance of type "EClassifier class". + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEClassifier_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEClassifier_class(problem,interpretation,element); } +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * An element must be an instance of type "EDataType class". + * An element must be an instance of type "InformationLink class". */ -private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EDataType class"); +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EDataType class"); + Type.name(type,"InformationLink class"); } /** - * An element may be an instance of type "EDataType class". + * An element may be an instance of type "InformationLink class". */ -private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEDataType_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEDataType_class(problem,interpretation,element); } +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnum class". + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnum class"); +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnum class"); + Type.name(type,"FunctionalInterface class"); } /** - * An element may be an instance of type "EEnum class". + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnum_class(problem, interpretation); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnum_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * An element must be an instance of type "EEnumLiteral class". + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EEnumLiteral class"); +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EEnumLiteral class"); + Type.name(type,"FunctionalInput class"); } /** - * An element may be an instance of type "EEnumLiteral class". + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * An element must be an instance of type "EModelElement class". + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class"); +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class"); + Type.name(type,"FunctionalOutput class"); } /** - * An element may be an instance of type "EModelElement class". + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfEModelElement_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * An element must be an instance of type "ENamedElement class". + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class"); +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class"); + Type.name(type,"FunctionalData class"); } /** - * An element may be an instance of type "ENamedElement class". + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class(problem, interpretation); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfENamedElement_class(problem,interpretation,element); } +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * An element must be an instance of type "EObject class". + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EObject class"); +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EObject class"); + Type.name(type,"FunctionType enum"); } /** - * An element may be an instance of type "EObject class". - */ -private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EOperation class". + * An element may be an instance of type "FunctionType enum". */ -private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EOperation class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EOperation class"); -} +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * An element may be an instance of type "EOperation class". + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mustInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewEOperation_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEOperation_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class". - */ -private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EPackage class". + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationinterface_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class(problem,interpretation,element); } + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EParameter class". + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EParameter class". + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationmodel_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewEParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEParameter_class(problem,interpretation,element); } + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EReference class". + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EReference class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EReference class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EReference class". + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationparent_reference_FunctionalElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEReference_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEReference_class(problem,interpretation,element); } + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EStructuralFeature class". + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStructuralFeature class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStructuralFeature class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EStructuralFeature class". + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); } + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); +} /** - * An element must be an instance of type "ETypedElement class". + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypedElement class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypedElement class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "ETypedElement class". + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationsubElements_reference_Function( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find scopeDisallowsNewETypedElement_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypedElement_class(problem,interpretation,element); } + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EStringToStringMapEntry class". + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EStringToStringMapEntry class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EStringToStringMapEntry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EStringToStringMapEntry class". + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationdata_reference_FAMTerminator( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); } + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); +} /** - * An element must be an instance of type "EGenericType class". + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EGenericType class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EGenericType class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EGenericType class". + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationfrom_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEGenericType_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEGenericType_class(problem,interpretation,element); } + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); +} /** - * An element must be an instance of type "ETypeParameter class". + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ETypeParameter class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ETypeParameter class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "ETypeParameter class". + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationto_reference_InformationLink( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewETypeParameter_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class DefinedPart". - */ -private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class DefinedPart"); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } - /** - * An element may be an instance of type "EModelElement class DefinedPart". - */ -private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EModelElement class UndefinedPart". + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EModelElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EModelElement class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EModelElement class UndefinedPart". + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationdata_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); - neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class DefinedPart"); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } - -/** - * An element may be an instance of type "ENamedElement class DefinedPart". - */ -private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); } /** - * An element must be an instance of type "ENamedElement class UndefinedPart". + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"ENamedElement class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"ENamedElement class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "ENamedElement class UndefinedPart". + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationelement_reference_FunctionalInterface( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "EPackage class DefinedPart". - */ -private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class DefinedPart"); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } - -/** - * An element may be an instance of type "EPackage class DefinedPart". - */ -private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); } /** - * An element must be an instance of type "EPackage class UndefinedPart". + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"EPackage class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"EPackage class UndefinedPart"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "EPackage class UndefinedPart". + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); +} /** - * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationeAttributeType_reference_EAttribute( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationeAttributeType_reference_EAttribute( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -59936,33 +43362,38 @@ private pattern mayInRelationeAttributeType_reference_EAttribute( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - find mayInstanceOfEDataType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []details reference EAnnotation(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationdetails_reference_EAnnotation( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>details reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationdetails_reference_EAnnotation( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -59971,34 +43402,42 @@ private pattern mayInRelationdetails_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationeModelElement_reference_EAnnotation( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationeModelElement_reference_EAnnotation( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60007,11 +43446,11 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEModelElement_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents @@ -60019,26 +43458,26 @@ private pattern mayInRelationeModelElement_reference_EAnnotation( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationcontents_reference_EAnnotation( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationcontents_reference_EAnnotation( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60047,798 +43486,987 @@ private pattern mayInRelationcontents_reference_EAnnotation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []references reference EAnnotation(source,target) - */ -private pattern mustInRelationreferences_reference_EAnnotation( + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); +} + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); +} + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>references reference EAnnotation(source,target) - */ -private pattern mayInRelationreferences_reference_EAnnotation( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - find mayInstanceOfEObject_class(problem,interpretation,target); -} or { - find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeSuperTypes_reference_EClass( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeSuperTypes_reference_EClass( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eOperations reference EClass(source,target) - */ -private pattern mustInRelationeOperations_reference_EClass( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eOperations reference EClass(source,target) - */ -private pattern mayInRelationeOperations_reference_EClass( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAllAttributes_reference_EClass( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAllAttributes_reference_EClass( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target) - */ -private pattern mustInRelationeAllReferences_reference_EClass( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target) - */ -private pattern mayInRelationeAllReferences_reference_EClass( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eReferences reference EClass(source,target) - */ -private pattern mustInRelationeReferences_reference_EClass( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eReferences reference EClass(source,target) - */ -private pattern mayInRelationeReferences_reference_EClass( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eAttributes reference EClass(source,target) - */ -private pattern mustInRelationeAttributes_reference_EClass( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target) - */ -private pattern mayInRelationeAttributes_reference_EClass( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); -} or { - find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target) - */ -private pattern mustInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target) - */ -private pattern mayInRelationeAllContainments_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); -} or { - find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target) - */ -private pattern mustInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target) - */ -private pattern mayInRelationeAllOperations_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); -} or { - find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mustInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target) - */ -private pattern mayInRelationeAllStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); -} or { - find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target) - */ -private pattern mustInRelationeAllSuperTypes_reference_EClass( +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target) - */ -private pattern mayInRelationeAllSuperTypes_reference_EClass( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); -} or { - find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target) - */ -private pattern mustInRelationeIDAttribute_reference_EClass( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target) - */ -private pattern mayInRelationeIDAttribute_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationeStructuralFeatures_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEStructuralFeature_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target) + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInRelationeGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target) + * An element must be an instance of type "Function class". */ -private pattern mustInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationeAllGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target) + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); } + /** - * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target) + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInRelationePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target) + * An element must be an instance of type "InformationLink class". */ -private pattern mustInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); } + /** - * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target) + * An element may be an instance of type "InformationLink class". */ -private pattern mayInRelationeTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target) + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); } + /** - * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target) + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInRelationeLiterals_reference_EEnum( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnum_class(problem,interpretation,source); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target) + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); } + /** - * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target) + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInRelationeEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - find mayInstanceOfEEnum_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target) + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); } + /** - * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target) + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInRelationeAnnotations_reference_EModelElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEModelElement_class(problem,interpretation,source); - find mayInstanceOfEAnnotation_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target) + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); } + /** - * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target) + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInRelationeContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target) + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } + /** - * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target) + * An element may be an instance of type "FunctionType enum". */ -private pattern mayInRelationeTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); -} +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * Matcher for detecting tuples t where []eParameters reference EOperation(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationeParameters_reference_EOperation( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationeParameters_reference_EOperation( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60847,11 +44475,15 @@ private pattern mayInRelationeParameters_reference_EOperation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEParameter_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -60859,26 +44491,26 @@ private pattern mayInRelationeParameters_reference_EOperation( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationeExceptions_reference_EOperation( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationeExceptions_reference_EOperation( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60887,29 +44519,33 @@ private pattern mayInRelationeExceptions_reference_EOperation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationeGenericExceptions_reference_EOperation( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationeGenericExceptions_reference_EOperation( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60918,34 +44554,38 @@ private pattern mayInRelationeGenericExceptions_reference_EOperation( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEOperation_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationeClassifiers_reference_EPackage( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target) + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mayInRelationeClassifiers_reference_EPackage( +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60954,38 +44594,34 @@ private pattern mayInRelationeClassifiers_reference_EPackage( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target) + * Matcher for detecting tuples t where []subElements reference Function(source,target) */ -private pattern mustInRelationeSubpackages_reference_EPackage( +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target) + * Matcher for detecting tuples t where <>subElements reference Function(source,target) */ -private pattern mayInRelationeSubpackages_reference_EPackage( +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -60994,11 +44630,11 @@ private pattern mayInRelationeSubpackages_reference_EPackage( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference to the target, // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_); + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents @@ -61006,26 +44642,26 @@ private pattern mayInRelationeSubpackages_reference_EPackage( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target) + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) */ -private pattern mustInRelationeSuperPackage_reference_EPackage( +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target) + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) */ -private pattern mayInRelationeSuperPackage_reference_EPackage( +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61034,38 +44670,42 @@ private pattern mayInRelationeSuperPackage_reference_EPackage( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - find mayInstanceOfEPackage_class(problem,interpretation,target); + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target); + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eOperation reference EParameter(source,target) + * Matcher for detecting tuples t where []from reference InformationLink(source,target) */ -private pattern mustInRelationeOperation_reference_EParameter( +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target) + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) */ -private pattern mayInRelationeOperation_reference_EParameter( +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61074,11 +44714,11 @@ private pattern mayInRelationeOperation_reference_EParameter( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEParameter_class(problem,interpretation,source); - find mayInstanceOfEOperation_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents @@ -61086,61 +44726,26 @@ private pattern mayInRelationeOperation_reference_EParameter( // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []eOpposite reference EReference(source,target) - */ -private pattern mustInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target) - */ -private pattern mayInRelationeOpposite_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEReference_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target); + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target) + * Matcher for detecting tuples t where []to reference InformationLink(source,target) */ -private pattern mustInRelationeReferenceType_reference_EReference( +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target) + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) */ -private pattern mayInRelationeReferenceType_reference_EReference( +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61149,33 +44754,33 @@ private pattern mayInRelationeReferenceType_reference_EReference( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target); + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eKeys reference EReference(source,target) + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) */ -private pattern mustInRelationeKeys_reference_EReference( +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eKeys reference EReference(source,target) + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) */ -private pattern mayInRelationeKeys_reference_EReference( +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61184,29 +44789,38 @@ private pattern mayInRelationeKeys_reference_EReference( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - find mayInstanceOfEAttribute_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target); + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target) + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) */ -private pattern mustInRelationeContainingClass_reference_EStructuralFeature( +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target) + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) */ -private pattern mayInRelationeContainingClass_reference_EStructuralFeature( +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61215,38 +44829,42 @@ private pattern mayInRelationeContainingClass_reference_EStructuralFeature( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - find mayInstanceOfEClass_class(problem,interpretation,target); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target); + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eType reference ETypedElement(source,target) + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) */ -private pattern mustInRelationeType_reference_ETypedElement( +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target) + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) */ -private pattern mayInRelationeType_reference_ETypedElement( +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61255,33 +44873,33 @@ private pattern mayInRelationeType_reference_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); } or { - find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target); + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target) + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mustInRelationeGenericType_reference_ETypedElement( +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target) + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) */ -private pattern mayInRelationeGenericType_reference_ETypedElement( +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61290,38 +44908,38 @@ private pattern mayInRelationeGenericType_reference_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target) + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) */ -private pattern mustInRelationeUpperBound_reference_EGenericType( +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target) + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) */ -private pattern mayInRelationeUpperBound_reference_EGenericType( +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61330,38 +44948,42 @@ private pattern mayInRelationeUpperBound_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); // The reference is containment, then a new reference cannot be create if: // 1. Multiple parents neg find mustContains4(problem,interpretation,_,target); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) */ -private pattern mustInRelationeTypeArguments_reference_EGenericType( +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) */ -private pattern mayInRelationeTypeArguments_reference_EGenericType( +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61370,34 +44992,38 @@ private pattern mayInRelationeTypeArguments_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); + neg find mustContains4(problem,interpretation,source,_); // 2. Circle in the containment hierarchy neg find mustTransitiveContains(source,target); } or { - find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target) + * Matcher for detecting tuples t where []type attribute Function(source,target) */ -private pattern mustInRelationeRawType_reference_EGenericType( +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target) + * Matcher for detecting tuples t where <>type attribute Function(source,target) */ -private pattern mayInRelationeRawType_reference_EGenericType( +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -61406,1054 +45032,987 @@ private pattern mayInRelationeRawType_reference_EGenericType( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target); + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); } -/** - * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target) - */ -private pattern mustInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); } -/** - * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target) - */ -private pattern mayInRelationeLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -/** - * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target) - */ -private pattern mustInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target) - */ -private pattern mayInRelationeTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfETypeParameter_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target) - */ -private pattern mustInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target) - */ -private pattern mayInRelationeClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEGenericType_class(problem,interpretation,source); - find mayInstanceOfEClassifier_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); check(numberOfExistingReferences < 1); -} or { - find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target) - */ -private pattern mustInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -/** - * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target) - */ -private pattern mayInRelationeBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypeParameter_class(problem,interpretation,source); - find mayInstanceOfEGenericType_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []iD attribute EAttribute(source,target) - */ -private pattern mustInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); -} -/** - * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target) - */ -private pattern mayInRelationiD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAttribute_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []source attribute EAnnotation(source,target) - */ -private pattern mustInRelationsource_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -/** - * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target) - */ -private pattern mayInRelationsource_attribute_EAnnotation( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEAnnotation_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target); -} -/** - * Matcher for detecting tuples t where []abstract attribute EClass(source,target) - */ -private pattern mustInRelationabstract_attribute_EClass( + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>abstract attribute EClass(source,target) - */ -private pattern mayInRelationabstract_attribute_EClass( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []interface attribute EClass(source,target) - */ -private pattern mustInRelationinterface_attribute_EClass( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>interface attribute EClass(source,target) - */ -private pattern mayInRelationinterface_attribute_EClass( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClass_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceClassName_attribute_EClassifier( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceClassName_attribute_EClassifier( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target) - */ -private pattern mustInRelationinstanceTypeName_attribute_EClassifier( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target) - */ -private pattern mayInRelationinstanceTypeName_attribute_EClassifier( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEClassifier_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []serializable attribute EDataType(source,target) - */ -private pattern mustInRelationserializable_attribute_EDataType( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target) - */ -private pattern mayInRelationserializable_attribute_EDataType( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEDataType_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationvalue_attribute_EEnumLiteral( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationvalue_attribute_EEnumLiteral( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target) - */ -private pattern mustInRelationliteral_attribute_EEnumLiteral( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target) - */ -private pattern mayInRelationliteral_attribute_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEEnumLiteral_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []name attribute ENamedElement(source,target) - */ -private pattern mustInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target) - */ -private pattern mayInRelationname_attribute_ENamedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfENamedElement_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target) - */ -private pattern mustInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target) - */ -private pattern mayInRelationnsURI_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target) - */ -private pattern mustInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target) - */ -private pattern mayInRelationnsPrefix_attribute_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEPackage_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } -/** - * Matcher for detecting tuples t where []containment attribute EReference(source,target) - */ -private pattern mustInRelationcontainment_attribute_EReference( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>containment attribute EReference(source,target) - */ -private pattern mayInRelationcontainment_attribute_EReference( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where []container attribute EReference(source,target) - */ -private pattern mustInRelationcontainer_attribute_EReference( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } -/** - * Matcher for detecting tuples t where <>container attribute EReference(source,target) - */ -private pattern mayInRelationcontainer_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.elements(problem,element); } or { - find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); } -/** - * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target) - */ -private pattern mustInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); } -/** - * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target) - */ -private pattern mayInRelationresolveProxies_attribute_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEReference_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); } or { - find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target); + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); } + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// /** - * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalElement class". */ -private pattern mustInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalElement class"); } + /** - * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalElement class". */ -private pattern mayInRelationchangeable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalArchitectureModel class". */ -private pattern mustInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalArchitectureModel class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalArchitectureModel class"); } + /** - * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalArchitectureModel class". */ -private pattern mayInRelationvolatile_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target) + * An element must be an instance of type "Function class". */ -private pattern mustInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Function class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Function class"); } + /** - * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target) + * An element may be an instance of type "Function class". */ -private pattern mayInRelationtransient_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunction_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunction_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target) + * An element must be an instance of type "FAMTerminator class". */ -private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FAMTerminator class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FAMTerminator class"); } + /** - * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target) + * An element may be an instance of type "FAMTerminator class". */ -private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target) + * An element must be an instance of type "InformationLink class". */ -private pattern mustInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"InformationLink class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"InformationLink class"); } + /** - * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target) + * An element may be an instance of type "InformationLink class". */ -private pattern mayInRelationunsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find scopeDisallowsNewInformationLink_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfInformationLink_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target) + * An element must be an instance of type "FunctionalInterface class". */ -private pattern mustInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInterface class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInterface class"); } + /** - * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target) + * An element may be an instance of type "FunctionalInterface class". */ -private pattern mayInRelationderived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStructuralFeature_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalInput class". */ -private pattern mustInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalInput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalInput class"); } + /** - * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalInput class". */ -private pattern mayInRelationordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalOutput class". */ -private pattern mustInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalOutput class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalOutput class"); } + /** - * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalOutput class". */ -private pattern mayInRelationunique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionalData class". */ -private pattern mustInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionalData class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionalData class"); } + /** - * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionalData class". */ -private pattern mayInRelationlowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); } or { - find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target); -} + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); + neg find scopeDisallowsNewFunctionalData_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); } /** - * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target) + * An element must be an instance of type "FunctionType enum". */ -private pattern mustInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ +private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FunctionType enum"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FunctionType enum"); } + /** - * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target) + * An element may be an instance of type "FunctionType enum". */ -private pattern mayInRelationupperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - IntegerElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target); -} +private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// /** - * Matcher for detecting tuples t where []many attribute ETypedElement(source,target) + * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target) */ -private pattern mustInRelationmany_attribute_ETypedElement( +private pattern mustInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target) + * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target) */ -private pattern mayInRelationmany_attribute_ETypedElement( +private pattern mayInRelationinterface_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -62462,33 +46021,42 @@ private pattern mayInRelationmany_attribute_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target); + find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []required attribute ETypedElement(source,target) + * Matcher for detecting tuples t where []model reference FunctionalElement(source,target) */ -private pattern mustInRelationrequired_attribute_ETypedElement( +private pattern mustInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target) + * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target) */ -private pattern mayInRelationrequired_attribute_ETypedElement( +private pattern mayInRelationmodel_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -62497,33 +46065,33 @@ private pattern mayInRelationrequired_attribute_ETypedElement( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfETypedElement_class(problem,interpretation,source); - BooleanElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); } or { - find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target); + find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target) */ -private pattern mustInRelationkey_attribute_EStringToStringMapEntry( +private pattern mustInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target) */ -private pattern mayInRelationkey_attribute_EStringToStringMapEntry( +private pattern mayInRelationparent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { @@ -62532,1724 +46100,948 @@ private pattern mayInRelationkey_attribute_EStringToStringMapEntry( find mayExist(problem, interpretation, source); find mayExist(problem, interpretation, target); // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); + find mayInstanceOfFunctionalElement_class(problem,interpretation,source); + find mayInstanceOfFunction_class(problem,interpretation,target); // There are "numberOfExistingReferences" currently existing instances of the reference from the source, // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_); + numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_); check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target); + find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target); } /** - * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target) + * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target) */ -private pattern mustInRelationvalue_attribute_EStringToStringMapEntry( +private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel"); PartialRelationInterpretation.relationlinks(relationIterpretation,link); BinaryElementRelationLink.param1(link,source); BinaryElementRelationLink.param2(link,target); } /** - * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target) - */ -private pattern mayInRelationvalue_attribute_EStringToStringMapEntry( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source); - StringElement(target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); -} or { - find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or - - { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or - - { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or - - { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or - - { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or - - { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or - - { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or - - { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or - - { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustInstanceOfEAttribute_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustInstanceOfEReference_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) -{ - find interpretation(problem,interpretation); - find mustInstanceOfEOperation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEGenericType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAttribute_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEDataType_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClassifier_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEAnnotation_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypeParameter_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEReference_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEEnum_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfETypedElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEClass_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -} -pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EStringToStringMapEntry_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class"); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnum_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class"); - find mayInstanceOfEEnum_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class"); - find mayInstanceOfEParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement"); - find mustInstanceOfETypedElement_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType"); - find mustInstanceOfEGenericType_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter"); - find mustInstanceOfETypeParameter_class(problem,interpretation,container); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EGenericType_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class"); - find mayInstanceOfEGenericType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EPackage_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart"); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class_by_contents_reference_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation"); - find mustInstanceOfEAnnotation_class(problem,interpretation,container); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EObject_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class"); - find mayInstanceOfEObject_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral"); - find mustInstanceOfEEnum_class(problem,interpretation,container); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EEnumLiteral_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class"); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier"); - find mustInstanceOfEClassifier_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation"); - find mustInstanceOfEOperation_class(problem,interpretation,container); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_ETypeParameter_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class"); - find mayInstanceOfETypeParameter_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAttribute_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class"); - find mayInstanceOfEAttribute_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EOperation_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class"); - find mayInstanceOfEOperation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation( + * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target) + */ +private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation"); - find mustInstanceOfEModelElement_class(problem,interpretation,container); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); } -pattern createObject_EAnnotation_class( +/** + * Matcher for detecting tuples t where []subElements reference Function(source,target) + */ +private pattern mustInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class"); - find mayInstanceOfEAnnotation_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature( +/** + * Matcher for detecting tuples t where <>subElements reference Function(source,target) + */ +private pattern mayInRelationsubElements_reference_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature"); - find mustInstanceOfEClass_class(problem,interpretation,container); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); } -pattern createObject_EReference_class( +/** + * Matcher for detecting tuples t where []data reference FAMTerminator(source,target) + */ +private pattern mustInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class"); - find mayInstanceOfEReference_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target) + */ +private pattern mayInRelationdata_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFAMTerminator_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target); } -pattern createObject_EDataType_class( +/** + * Matcher for detecting tuples t where []from reference InformationLink(source,target) + */ +private pattern mustInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class"); - find mayInstanceOfEDataType_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier( +/** + * Matcher for detecting tuples t where <>from reference InformationLink(source,target) + */ +private pattern mayInRelationfrom_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier"); - find mustInstanceOfEPackage_class(problem,interpretation,container); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target); } -pattern createObject_EClass_class( +/** + * Matcher for detecting tuples t where []to reference InformationLink(source,target) + */ +private pattern mustInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class"); - find mayInstanceOfEClass_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); -} -pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); -} -pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); -} -pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEModelElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); -} -pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); -} -pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); -} -pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); -} -pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfENamedElement_class(problem,interpretation,element); -} -pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEParameter_class(problem,interpretation,element); - neg find mustInstanceOfEReference_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfEClassifier_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); - neg find mustInstanceOfEOperation_class(problem,interpretation,element); - neg find mustInstanceOfEAttribute_class(problem,interpretation,element); -} -pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEEnum_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); -} -pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEAnnotation_class(problem,interpretation,element); - neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); - neg find mustInstanceOfEGenericType_class(problem,interpretation,element); - neg find mustInstanceOfEObject_class(problem,interpretation,element); - neg find mustInstanceOfEDataType_class(problem,interpretation,element); - neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); - neg find mustInstanceOfETypeParameter_class(problem,interpretation,element); - neg find mustInstanceOfETypedElement_class(problem,interpretation,element); - neg find mustInstanceOfEClass_class(problem,interpretation,element); - neg find mustInstanceOfEPackage_class(problem,interpretation,element); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_eAttributeType_reference_EAttribute( +/** + * Matcher for detecting tuples t where <>to reference InformationLink(source,target) + */ +private pattern mayInRelationto_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - find mustInstanceOfEDataType_class(problem,interpretation,to); - find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); - neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfInformationLink_class(problem,interpretation,source); + find mayInstanceOfFunctionalInput_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationto_reference_InformationLink(problem,interpretation,source,target); } -pattern refineRelation_references_reference_EAnnotation( +/** + * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target) + */ +private pattern mustInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - find mustInstanceOfEObject_class(problem,interpretation,to); - find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target) + */ +private pattern mayInRelationdata_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalData_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern refineRelation_eAllAttributes_reference_EClass( +/** + * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target) + */ +private pattern mustInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllReferences_reference_EClass( +/** + * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target) + */ +private pattern mayInRelationelement_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInterface_class(problem,interpretation,source); + find mayInstanceOfFunctionalElement_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target); } -pattern refineRelation_eReferences_reference_EClass( +/** + * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mustInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAttributes_reference_EClass( +/** + * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target) + */ +private pattern mayInRelationIncomingLinks_reference_FunctionalInput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalInput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target); } -pattern refineRelation_eAllContainments_reference_EClass( +/** + * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllOperations_reference_EClass( +/** + * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target) + */ +private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEOperation_class(problem,interpretation,to); - find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalOutput_class(problem,interpretation,source); + find mayInstanceOfInformationLink_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); } -pattern refineRelation_eAllStructuralFeatures_reference_EClass( +/** + * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target) + */ +private pattern mustInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,to); - find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target) + */ +private pattern mayInRelationterminator_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFAMTerminator_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } -pattern refineRelation_eIDAttribute_reference_EClass( +/** + * Matcher for detecting tuples t where []interface reference FunctionalData(source,target) + */ +private pattern mustInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eAllGenericSuperTypes_reference_EClass( +/** + * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target) + */ +private pattern mayInRelationinterface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - find mustInstanceOfEGenericType_class(problem,interpretation,to); - find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); - neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunctionalData_class(problem,interpretation,source); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target); } -pattern refineRelation_eExceptions_reference_EOperation( +/** + * Matcher for detecting tuples t where []type attribute Function(source,target) + */ +private pattern mustInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEOperation_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); - neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern refineRelation_eOpposite_reference_EReference( +/** + * Matcher for detecting tuples t where <>type attribute Function(source,target) + */ +private pattern mayInRelationtype_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEReference_class(problem,interpretation,to); - find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfFunction_class(problem,interpretation,source); + find mayInstanceOfFunctionType_enum(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtype_attribute_Function(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// + +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); +} + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or + + { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or + + { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or + + { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or + + { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or + + { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -pattern refineRelation_eReferenceType_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// + +////////// +// 3. Unfinishedness Indexers +////////// +// 3.1 Unfinishedness Measured by Multiplicity +////////// +pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEClass_class(problem,interpretation,to); - find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eKeys_reference_EReference( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - find mustInstanceOfEAttribute_class(problem,interpretation,to); - find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to); - neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink"); + find mustInstanceOfInformationLink_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eType_reference_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); + find mustInstanceOfFunction_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_); + check(numberOfExistingReferences < 1); + missingMultiplicity == eval(1-numberOfExistingReferences); } -pattern refineRelation_eRawType_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + +////////// +// 3.2 Unfinishedness Measured by WF Queries +////////// + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eTypeParameter_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalInterface_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfETypeParameter_class(problem,interpretation,to); - find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_eClassifier_reference_EGenericType( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfInformationLink_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEGenericType_class(problem,interpretation,from); - find mustInstanceOfEClassifier_class(problem,interpretation,to); - find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); - neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to); -} -pattern refineRelation_iD_attribute_EAttribute( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAttribute_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to); - neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to); -} -pattern refineRelation_source_attribute_EAnnotation( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFAMTerminator_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEAnnotation_class(problem,interpretation,from); - StringElement(to); - find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); - neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to); -} -pattern refineRelation_abstract_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_interface_attribute_EClass( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunctionalInput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClass_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to); - neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to); -} -pattern refineRelation_instanceClassName_attribute_EClassifier( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfFunction_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFunctionalData_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); } -pattern refineRelation_instanceTypeName_attribute_EClassifier( +pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEClassifier_class(problem,interpretation,from); - StringElement(to); - find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); - neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface"); + find mustInstanceOfFunctionalElement_class(problem,interpretation,container); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_serializable_attribute_EDataType( +pattern createObject_FunctionalInterface_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEDataType_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to); - neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class"); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_value_attribute_EEnumLiteral( +pattern createObject_FunctionalArchitectureModel_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class"); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_literal_attribute_EEnumLiteral( +pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEEnumLiteral_class(problem,interpretation,from); - StringElement(to); - find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); - neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_name_attribute_ENamedElement( +pattern createObject_FunctionalInput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfENamedElement_class(problem,interpretation,from); - StringElement(to); - find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to); - neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class"); + find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_nsURI_attribute_EPackage( +pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel"); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_nsPrefix_attribute_EPackage( +pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEPackage_class(problem,interpretation,from); - StringElement(to); - find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); - neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement"); + find mustInstanceOfFunction_class(problem,interpretation,container); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_containment_attribute_EReference( +pattern createObject_Function_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class"); + find mayInstanceOfFunction_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_container_attribute_EReference( +pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData"); + find mustInstanceOfFunctionalInterface_class(problem,interpretation,container); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_resolveProxies_attribute_EReference( +pattern createObject_FunctionalOutput_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEReference_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); - neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class"); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_changeable_attribute_EStructuralFeature( +pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator"); + find mustInstanceOfFunctionalData_class(problem,interpretation,container); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_volatile_attribute_EStructuralFeature( +pattern createObject_FAMTerminator_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class"); + find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_transient_attribute_EStructuralFeature( +pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink"); + find mustInstanceOfFunctionalOutput_class(problem,interpretation,container); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature( +pattern createObject_InformationLink_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - StringElement(to); - find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class"); + find mayInstanceOfInformationLink_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -pattern refineRelation_unsettable_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_derived_attribute_EStructuralFeature( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfEStructuralFeature_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); - neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_ordered_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_unique_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFunction_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_lowerBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_upperBound_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - IntegerElement(to); - find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_many_attribute_ETypedElement( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfInformationLink_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); + neg find mustInstanceOfFunctionalData_class(problem,interpretation,element); + neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element); + neg find mustInstanceOfInformationLink_class(problem,interpretation,element); } -pattern refineRelation_required_attribute_ETypedElement( + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_model_reference_FunctionalElement( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfETypedElement_class(problem,interpretation,from); - BooleanElement(to); - find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); - neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to); + find mustInstanceOfFunctionalElement_class(problem,interpretation,from); + find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to); + find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); + neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to); } -pattern refineRelation_key_attribute_EStringToStringMapEntry( +pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + find mustInstanceOfFunctionalInput_class(problem,interpretation,from); + find mustInstanceOfInformationLink_class(problem,interpretation,to); + find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); + neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to); } -pattern refineRelation_value_attribute_EStringToStringMapEntry( +pattern refineRelation_type_attribute_Function( problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from); - StringElement(to); - find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); - neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); + find mustInstanceOfFunction_class(problem,interpretation,from); + find mustInstanceOfFunctionType_enum(problem,interpretation,to); + find mayInRelationtype_attribute_Function(problem,interpretation,from,to); + neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to); } 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 169eadb3..f221cce7 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 @@ -1,97 +1,82 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - + + - - + + - - + + - + - + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -105,24 +90,24 @@ - + - + - + - + - + - + @@ -136,24 +121,24 @@ - + - + - + - + - + @@ -167,24 +152,24 @@ - + - + - + - + - + - + @@ -198,55 +183,42 @@ - + - - - - - - - + - - - - - - - + + + + + + - + - - - - - - - + - + - + - + - + - + - + @@ -260,24 +232,24 @@ - + - + - + - + - + - + @@ -291,24 +263,24 @@ - + - + - + - + - + - + @@ -322,1738 +294,287 @@ - - - - - - - - - - - - - - - - - - - + - + - + - + - - - + + + - - - + + + - - + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - - - - - - - - - - - - - - - - - - - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - - - - + - - - - - - - - - + + + + + + + + - - - - - - - + - + - + - + - + - - - + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - + + - - - - - - - - - - - + - - - - - - - - - + + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - + - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel index 985e7346..55020b90 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel @@ -1,5 +1,5 @@ - + @@ -76,398 +76,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - + - + - + - + - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -481,17 +122,4 @@ - - - - - - - - - - - - - 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 index 16ff4006..716e4f33 100644 --- 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 @@ -1,6 +1,6 @@ one sig util'language { - 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))))))))), - 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)))))))))) + util'root : one type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))), + util'contains : (type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart)))))))))) lone->set (type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart)))))))))) } abstract sig util'Object { } @@ -12,7 +12,8 @@ sig type'FunctionalArchitectureModel'class in util'Object { rootElements'reference'FunctionalArchitectureModel : set type'FunctionalElement'class } sig type'Function'class in type'FunctionalElement'class { - subElements'reference'Function : set type'FunctionalElement'class + subElements'reference'Function : set type'FunctionalElement'class, + type'attribute'Function : one type'FunctionType'enum } sig type'FAMTerminator'class in util'Object { data'reference'FAMTerminator : lone type'FunctionalData'class @@ -41,17 +42,14 @@ sig type'FunctionalArchitectureModel'class'DefinedPart in type'FunctionalArchite } sig type'FunctionalArchitectureModel'class'UndefinedPart in type'FunctionalArchitectureModel'class { } -one sig element'o'1 in type'FunctionalArchitectureModel'class'DefinedPart { -} one sig element'Root'literal'FunctionType, element'Intermediate'literal'FunctionType, element'Leaf'literal'FunctionType in type'FunctionType'enum { } -pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [parameter'T: type'FAMTerminator'class, parameter'I: type'InformationLink'class] { - (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) }) +one sig element'o'1 in type'FunctionalArchitectureModel'class'DefinedPart { } -pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [parameter'This: type'Function'class, parameter'Target: type'FunctionType'enum] { - (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) })) +pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [parameter'T: type'FAMTerminator'class, parameter'I: type'InformationLink'class] { + (some variable'Out: type'FunctionalOutput'class { parameter'I in variable'Out.outgoingLinks'reference'FunctionalOutput && parameter'T in variable'Out.terminator'reference'FunctionalData }) or (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) }) } pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'rootElements [parameter'Model: type'FunctionalArchitectureModel'class, parameter'Root: type'Function'class] { parameter'Root in type'Function'class && parameter'Root in parameter'Model.rootElements'reference'FunctionalArchitectureModel @@ -159,19 +157,19 @@ fact util'containmentDefinition { util'language.util'contains = interface'reference'FunctionalElement + (rootElements'reference'FunctionalArchitectureModel + (subElements'reference'Function + (data'reference'FunctionalInterface + (outgoingLinks'reference'FunctionalOutput + terminator'reference'FunctionalData)))) } fact util'noParentForRoot { - 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 } + no parent: type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { parent->(util'language.util'root) in util'language.util'contains } } fact util'atLeastOneParent { - 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 }) } + all child: type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { child = util'language.util'root or (some parent: type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { parent->child in util'language.util'contains }) } } fact util'noCircularContainment { - 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) } + no circle: type'InformationLink'class + (type'FunctionalOutput'class + (type'FunctionalInput'class + (type'FunctionalData'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'Function'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { circle->circle in ^ (util'language.util'contains) } } fact lowerMultiplicity'model'FunctionalElement { all src: type'FunctionalElement'class { some trg'1: type'FunctionalArchitectureModel'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [ src , trg'1 ] } } } fact upperMultiplicity'model'FunctionalElement { - 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) } + 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 ] implies ! (trg'1 != trg'2) } } fact oppositeReference'interface'FunctionalElement { interface'reference'FunctionalElement = ~ element'reference'FunctionalInterface @@ -191,13 +189,7 @@ fact oppositeReference'to'InformationLink { fact oppositeReference'data'FunctionalInterface { data'reference'FunctionalInterface = ~ interface'reference'FunctionalData } -fact lowerMultiplicity'type'Function { - all src: type'Function'class { some trg'1: type'FunctionType'enum { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [ src , trg'1 ] } } -} -fact upperMultiplicity'type'Function { - 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) } -} fact errorpattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation { all p0: type'FAMTerminator'class, p1: type'InformationLink'class { ! (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [ p0 , p1 ]) } } -run { } for exactly 5 util'Object , 31 Int , exactly 0 String \ No newline at end of file +run { } for exactly 10 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 8c87a095..7029fce0 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 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 +Model generation startedModel generation startedModel generation startedModel generation startedProblem is consistent, 5 models are generated!Model generation startedModel generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model 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, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model 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, 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, 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, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model 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, 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, 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, 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, 5 models are generated!Model 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, 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, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated!Model generation startedProblem is consistent, 5 models are generated! \ 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 9eac10b7..3e4dddc2 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 @@ -113,8 +113,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -122,7 +122,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -134,8 +134,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -150,7 +148,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -159,7 +157,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -185,8 +183,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -194,7 +192,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -206,6 +204,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -220,7 +219,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -241,8 +240,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -257,8 +256,8 @@ graph id 7 graphics [ - w 112.2 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -266,7 +265,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -278,6 +277,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -292,8 +293,8 @@ graph id 8 graphics [ - w 85.80000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -301,7 +302,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -313,6 +314,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -327,8 +330,8 @@ graph id 9 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -336,7 +339,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -348,6 +351,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -362,64 +366,7 @@ graph id 10 graphics [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 + w 161.70000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -428,7 +375,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -440,7 +387,7 @@ graph LabelGraphics [ text " - FunctionType enum + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -452,11 +399,11 @@ graph node [ - id 1 + id 11 graphics [ - w 297.0 - h 40 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -464,7 +411,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -476,7 +423,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -488,11 +436,11 @@ graph node [ - id 2 + id 12 graphics [ - w 226.60000000000002 - h 40 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -500,7 +448,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -512,7 +460,6 @@ graph LabelGraphics [ text " - FunctionType enum " fontSize 14 fontName "Consolas" @@ -524,11 +471,11 @@ graph node [ - id 3 + id 13 graphics [ - w 361.90000000000003 - h 54 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -536,7 +483,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -548,8 +495,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -561,10 +506,10 @@ graph node [ - id 4 + id 14 graphics [ - w 41.800000000000004 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -573,7 +518,7 @@ graph ] LabelGraphics [ - text "true" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -596,10 +541,10 @@ graph node [ - id 5 + id 15 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -608,7 +553,7 @@ graph ] LabelGraphics [ - text "false" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -628,186 +573,66 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 10 + target 8 + graphics [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 9 + target 7 + graphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 9 + target 11 + graphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ - source 3 + source 5 target 6 graphics [ @@ -817,7 +642,202 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -941,8 +961,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -950,7 +970,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -962,8 +982,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -978,7 +996,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -987,7 +1005,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1013,8 +1031,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1022,7 +1040,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1034,6 +1052,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -1048,7 +1067,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -1069,8 +1088,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1085,8 +1104,8 @@ graph id 7 graphics [ - w 112.2 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1094,7 +1113,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1106,6 +1125,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -1120,8 +1140,8 @@ graph id 8 graphics [ - w 85.80000000000001 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1129,7 +1149,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1141,6 +1161,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -1155,8 +1176,8 @@ graph id 9 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1164,7 +1185,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1176,6 +1197,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1190,65 +1213,8 @@ graph id 10 graphics [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1256,7 +1222,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1268,7 +1234,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1280,10 +1247,10 @@ graph node [ - id 1 + id 11 graphics [ - w 297.0 + w 161.70000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -1292,7 +1259,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1304,7 +1271,7 @@ graph LabelGraphics [ text " - FunctionType enum + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -1316,11 +1283,11 @@ graph node [ - id 2 + id 12 graphics [ - w 226.60000000000002 - h 40 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1328,7 +1295,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1340,7 +1307,6 @@ graph LabelGraphics [ text " - FunctionType enum " fontSize 14 fontName "Consolas" @@ -1352,11 +1318,11 @@ graph node [ - id 3 + id 13 graphics [ - w 361.90000000000003 - h 54 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1364,7 +1330,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1376,8 +1342,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -1389,10 +1353,10 @@ graph node [ - id 4 + id 14 graphics [ - w 41.800000000000004 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -1401,7 +1365,7 @@ graph ] LabelGraphics [ - text "true" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1424,10 +1388,10 @@ graph node [ - id 5 + id 15 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -1436,7 +1400,7 @@ graph ] LabelGraphics [ - text "false" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1456,196 +1420,75 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 11 + target 9 + graphics [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 7 + target 6 + graphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 8 + target 6 + graphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ - source 3 - target 6 + source 7 + target 9 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1653,412 +1496,58 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 8 + target 9 + graphics [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 5 + target 6 + graphics [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics + ] + edge + [ + source 5 + target 9 + graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "model reference FunctionalElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2068,8 +1557,8 @@ graph ] edge [ - source 3 - target 6 + source 5 + target 10 graphics [ fill "#000000" @@ -2078,7 +1567,7 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2088,8 +1577,8 @@ graph ] edge [ - source 6 - target 0 + source 9 + target 7 graphics [ fill "#000000" @@ -2097,7 +1586,7 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2105,4366 +1594,58 @@ graph position "thead" ] ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node + edge + [ + source 9 + target 8 + graphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 6 + target 7 + graphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ source 6 - target 3 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "model reference FunctionalElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6474,8 +1655,8 @@ graph ] edge [ - source 3 - target 6 + source 9 + target 11 graphics [ fill "#000000" @@ -6484,7 +1665,7 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6495,7 +1676,7 @@ graph edge [ source 6 - target 1 + target 5 graphics [ fill "#000000" @@ -6503,7 +1684,7 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6511,267 +1692,54 @@ graph position "thead" ] ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "0" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node + edge + [ + source 9 + target 5 + graphics [ - id 5 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 6 - graphics - [ - w 33.0 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text ""A"" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 7 + id 0 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6779,7 +1747,7 @@ graph ] LabelGraphics [ - text ""B"" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6791,6 +1759,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6802,11 +1771,11 @@ graph node [ - id 8 + id 1 graphics [ - w 94.60000000000001 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6814,7 +1783,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6826,6 +1795,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6837,11 +1807,11 @@ graph node [ - id 9 + id 2 graphics [ - w 68.2 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6849,7 +1819,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6861,6 +1831,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6872,10 +1843,10 @@ graph node [ - id 10 + id 3 graphics [ - w 121.00000000000001 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -6884,7 +1855,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6907,11 +1878,11 @@ graph node [ - id 11 + id 4 graphics [ - w 269.5 - h 124 + w 50.6 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6919,7 +1890,7 @@ graph ] LabelGraphics [ - text "null" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6931,13 +1902,6 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -6949,11 +1913,11 @@ graph node [ - id 12 + id 5 graphics [ - w 269.5 - h 124 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6973,13 +1937,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -6991,11 +1949,11 @@ graph node [ - id 13 + id 6 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7015,12 +1973,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7032,11 +1986,11 @@ graph node [ - id 14 + id 7 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7056,13 +2010,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7074,11 +2023,11 @@ graph node [ - id 15 + id 8 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7098,13 +2047,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7116,11 +2060,11 @@ graph node [ - id 16 + id 9 graphics [ - w 112.2 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7128,7 +2072,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7140,6 +2084,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7151,11 +2096,11 @@ graph node [ - id 17 + id 10 graphics [ - w 85.80000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7163,7 +2108,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7175,6 +2120,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7186,11 +2133,11 @@ graph node [ - id 18 + id 11 graphics [ - w 103.4 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7198,7 +2145,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7210,6 +2157,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7221,10 +2170,10 @@ graph node [ - id 19 + id 12 graphics [ - w 103.4 + w 112.2 h 26 type "rectangle" fill "#FFFFFF" @@ -7233,7 +2182,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7253,224 +2202,115 @@ graph borderDistance 6 ] ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 13 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 11 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 12 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 13 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics + + node [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 12 - target 8 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "instanceClassName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 11 - target 6 + source 9 + target 7 graphics [ fill "#000000" @@ -7478,7 +2318,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7488,16 +2328,17 @@ graph ] edge [ - source 11 - target 10 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7507,16 +2348,17 @@ graph ] edge [ - source 12 - target 8 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7526,16 +2368,17 @@ graph ] edge [ - source 0 - target 10 + source 5 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7545,16 +2388,17 @@ graph ] edge [ - source 12 + source 5 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7564,16 +2408,17 @@ graph ] edge [ - source 11 - target 10 + source 5 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7583,16 +2428,17 @@ graph ] edge [ - source 13 - target 6 + source 7 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7602,8 +2448,8 @@ graph ] edge [ - source 0 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -7611,7 +2457,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7621,8 +2467,8 @@ graph ] edge [ - source 0 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -7630,239 +2476,81 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 8 + target 5 + graphics [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 10 + target 5 + graphics [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 6 + id 0 graphics [ - w 192.50000000000003 - h 54 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7870,7 +2558,7 @@ graph ] LabelGraphics [ - text "null" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7882,8 +2570,7 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7895,11 +2582,11 @@ graph node [ - id 7 + id 1 graphics [ - w 112.2 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7907,7 +2594,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7919,6 +2606,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7930,11 +2618,11 @@ graph node [ - id 8 + id 2 graphics [ - w 85.80000000000001 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7942,7 +2630,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7954,6 +2642,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7965,10 +2654,10 @@ graph node [ - id 9 + id 3 graphics [ - w 103.4 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -7977,7 +2666,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8000,10 +2689,10 @@ graph node [ - id 10 + id 4 graphics [ - w 103.4 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -8012,93 +2701,33 @@ graph ] LabelGraphics [ - text "New Objects" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 fontName "Monospace" autoSizePolicy "node_width" anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 5 graphics [ - w 226.60000000000002 + w 207.9 h 40 type "rectangle" fill "#FFFFFF" @@ -8107,7 +2736,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8119,7 +2748,7 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -8131,11 +2760,11 @@ graph node [ - id 1 + id 6 graphics [ - w 297.0 - h 40 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8143,7 +2772,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8155,7 +2784,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8167,11 +2797,11 @@ graph node [ - id 2 + id 7 graphics [ - w 226.60000000000002 - h 40 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8179,7 +2809,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8191,7 +2821,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8203,10 +2834,10 @@ graph node [ - id 3 + id 8 graphics [ - w 361.90000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -8215,7 +2846,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8227,8 +2858,8 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8240,11 +2871,11 @@ graph node [ - id 4 + id 9 graphics [ - w 41.800000000000004 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8252,7 +2883,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8264,6 +2895,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -8275,11 +2907,11 @@ graph node [ - id 5 + id 10 graphics [ - w 50.6 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8287,7 +2919,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8299,6 +2931,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -8310,11 +2943,11 @@ graph node [ - id 6 + id 11 graphics [ - w 192.50000000000003 - h 54 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8334,8 +2967,7 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -8347,7 +2979,7 @@ graph node [ - id 7 + id 12 graphics [ w 112.2 @@ -8382,7 +3014,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -8417,7 +3049,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -8449,45 +3081,222 @@ graph borderDistance 6 ] ] - - node + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ source 6 - target 3 + target 5 graphics [ fill "#000000" @@ -8495,7 +3304,7 @@ graph ] LabelGraphics [ - text "model reference FunctionalElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8505,17 +3314,16 @@ graph ] edge [ - source 3 - target 6 + source 7 + target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8525,8 +3333,8 @@ graph ] edge [ - source 6 - target 2 + source 8 + target 5 graphics [ fill "#000000" @@ -8534,7 +3342,7 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8550,8 +3358,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8559,7 +3367,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8571,12 +3379,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -8591,8 +3394,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8600,7 +3403,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8612,6 +3415,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -8626,8 +3430,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8635,7 +3439,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8647,6 +3451,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -8661,7 +3466,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -8670,7 +3475,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8696,7 +3501,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -8705,7 +3510,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8731,8 +3536,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8740,7 +3545,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8752,6 +3557,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -8766,8 +3572,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8775,7 +3581,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8787,6 +3593,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -8801,8 +3609,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8810,7 +3618,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8822,6 +3630,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -8836,8 +3645,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8845,7 +3654,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8857,6 +3666,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8871,8 +3682,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8880,7 +3691,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8892,6 +3703,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -8906,8 +3718,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8915,7 +3727,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8927,6 +3739,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8941,8 +3755,8 @@ graph id 11 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8962,12 +3776,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8981,164 +3791,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 68 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 68 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -9172,7 +3824,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -9207,7 +3859,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -9242,7 +3894,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -9266,45 +3918,27 @@ graph LabelGraphics [ text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 15 - target 0 + source 6 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9314,8 +3948,8 @@ graph ] edge [ - source 11 - target 0 + source 6 + target 5 graphics [ fill "#000000" @@ -9323,7 +3957,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9333,16 +3967,17 @@ graph ] edge [ - source 13 - target 0 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "ePackage reference EClassifier" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9352,8 +3987,8 @@ graph ] edge [ - source 14 - target 0 + source 9 + target 8 graphics [ fill "#000000" @@ -9361,7 +3996,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9371,8 +4006,8 @@ graph ] edge [ - source 0 - target 12 + source 7 + target 8 graphics [ fill "#000000" @@ -9381,7 +4016,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9391,8 +4026,8 @@ graph ] edge [ - source 0 - target 15 + source 7 + target 10 graphics [ fill "#000000" @@ -9401,7 +4036,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9411,7 +4046,7 @@ graph ] edge [ - source 0 + source 7 target 11 graphics [ @@ -9421,7 +4056,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9431,17 +4066,16 @@ graph ] edge [ - source 0 - target 13 + source 7 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9451,8 +4085,8 @@ graph ] edge [ - source 0 - target 14 + source 8 + target 9 graphics [ fill "#000000" @@ -9461,7 +4095,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9471,7 +4105,7 @@ graph ] edge [ - source 12 + source 8 target 7 graphics [ @@ -9480,45 +4114,7 @@ graph ] LabelGraphics [ - text "source attribute EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceTypeName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9528,8 +4124,8 @@ graph ] edge [ - source 0 - target 10 + source 10 + target 7 graphics [ fill "#000000" @@ -9537,7 +4133,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9548,45 +4144,7 @@ graph edge [ source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 + target 7 graphics [ fill "#000000" @@ -9594,7 +4152,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9604,8 +4162,8 @@ graph ] edge [ - source 0 - target 8 + source 6 + target 2 graphics [ fill "#000000" @@ -9613,7 +4171,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "type attribute Function" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9629,8 +4187,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9638,7 +4196,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9650,12 +4208,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9670,8 +4223,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9679,7 +4232,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9691,6 +4244,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9705,148 +4259,8 @@ graph id 2 graphics [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "0" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9854,7 +4268,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9866,6 +4280,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9877,10 +4292,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -9889,7 +4304,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9912,10 +4327,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -9924,7 +4339,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9947,11 +4362,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9959,7 +4374,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9971,6 +4386,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -9982,11 +4398,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9994,7 +4410,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10006,6 +4422,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -10017,11 +4435,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 124 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10041,13 +4459,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -10059,11 +4471,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10083,13 +4495,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10101,11 +4508,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10125,11 +4532,7 @@ graph LabelGraphics [ text " - EEnumLiteral class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -10141,11 +4544,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 68 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10165,9 +4568,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10179,11 +4581,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 96 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10203,11 +4605,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -10219,7 +4617,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -10254,7 +4652,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -10289,7 +4687,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -10324,7 +4722,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -10358,124 +4756,8 @@ graph ] edge [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eTypeParameters reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 13 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eLiterals reference EEnum" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eEnum reference EEnumLiteral" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 14 + source 6 + target 7 graphics [ fill "#000000" @@ -10484,7 +4766,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10494,17 +4776,16 @@ graph ] edge [ - source 0 - target 11 + source 6 + target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10514,8 +4795,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 6 graphics [ fill "#000000" @@ -10524,7 +4805,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10534,7 +4815,7 @@ graph ] edge [ - source 11 + source 9 target 8 graphics [ @@ -10543,7 +4824,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10554,7 +4835,7 @@ graph edge [ source 11 - target 9 + target 10 graphics [ fill "#000000" @@ -10562,7 +4843,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10572,8 +4853,8 @@ graph ] edge [ - source 12 - target 9 + source 11 + target 8 graphics [ fill "#000000" @@ -10581,7 +4862,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10591,16 +4872,17 @@ graph ] edge [ - source 11 - target 2 + source 7 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "serializable attribute EDataType" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10610,16 +4892,17 @@ graph ] edge [ - source 12 - target 2 + source 7 + target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "serializable attribute EDataType" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10629,8 +4912,8 @@ graph ] edge [ - source 13 - target 9 + source 7 + target 6 graphics [ fill "#000000" @@ -10638,7 +4921,7 @@ graph ] LabelGraphics [ - text "literal attribute EEnumLiteral" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10648,8 +4931,8 @@ graph ] edge [ - source 0 - target 10 + source 8 + target 11 graphics [ fill "#000000" @@ -10657,7 +4940,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10667,16 +4950,17 @@ graph ] edge [ - source 12 - target 10 + source 10 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10686,16 +4970,17 @@ graph ] edge [ - source 0 + source 8 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10705,8 +4990,8 @@ graph ] edge [ - source 0 - target 8 + source 8 + target 7 graphics [ fill "#000000" @@ -10714,170 +4999,62 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 10 + target 7 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10885,7 +5062,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10897,6 +5074,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10908,11 +5086,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10920,7 +5098,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10932,6 +5110,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10943,11 +5122,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10955,7 +5134,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10967,6 +5146,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10978,10 +5158,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -10990,7 +5170,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11013,10 +5193,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -11025,7 +5205,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11048,11 +5228,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11060,7 +5240,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11072,6 +5252,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -11083,11 +5264,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11095,7 +5276,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11107,6 +5288,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -11118,11 +5301,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11142,12 +5325,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -11159,11 +5337,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11183,12 +5361,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -11200,11 +5374,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11224,13 +5398,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -11242,11 +5411,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11266,11 +5435,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -11282,11 +5447,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 68 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11306,9 +5471,7 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -11320,7 +5483,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -11355,7 +5518,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -11390,7 +5553,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -11425,7 +5588,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -11442,102 +5605,25 @@ graph fill "#FFFFFF" fontSize 16 fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 15 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eTypeParameters reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 0 - target 15 + source 6 + target 7 graphics [ fill "#000000" @@ -11546,7 +5632,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11556,17 +5642,16 @@ graph ] edge [ - source 0 - target 11 + source 6 + target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11576,8 +5661,8 @@ graph ] edge [ - source 0 - target 13 + source 5 + target 6 graphics [ fill "#000000" @@ -11586,7 +5671,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11596,17 +5681,16 @@ graph ] edge [ - source 0 - target 12 + source 10 + target 9 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11616,8 +5700,8 @@ graph ] edge [ - source 12 - target 0 + source 11 + target 8 graphics [ fill "#000000" @@ -11625,7 +5709,7 @@ graph ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11635,16 +5719,17 @@ graph ] edge [ - source 11 - target 6 + source 7 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11654,16 +5739,17 @@ graph ] edge [ - source 11 - target 1 + source 7 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "serializable attribute EDataType" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11673,8 +5759,8 @@ graph ] edge [ - source 0 - target 10 + source 7 + target 6 graphics [ fill "#000000" @@ -11682,7 +5768,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11692,16 +5778,17 @@ graph ] edge [ - source 12 - target 6 + source 9 + target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11711,16 +5798,17 @@ graph ] edge [ - source 0 - target 9 + source 8 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11730,8 +5818,8 @@ graph ] edge [ - source 12 - target 10 + source 8 + target 7 graphics [ fill "#000000" @@ -11739,7 +5827,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11749,8 +5837,8 @@ graph ] edge [ - source 0 - target 8 + source 9 + target 7 graphics [ fill "#000000" @@ -11758,7 +5846,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11768,8 +5856,8 @@ graph ] edge [ - source 12 - target 8 + source 6 + target 0 graphics [ fill "#000000" @@ -11777,7 +5865,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "type attribute Function" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11793,8 +5881,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11802,7 +5890,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11814,12 +5902,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -11834,8 +5917,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11843,7 +5926,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11855,6 +5938,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -11869,8 +5953,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11878,7 +5962,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11890,6 +5974,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -11904,7 +5989,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -11913,7 +5998,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11939,7 +6024,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -11948,7 +6033,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11974,8 +6059,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11983,7 +6068,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -11995,6 +6080,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -12009,8 +6095,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12018,7 +6104,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -12030,6 +6116,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -12044,8 +6132,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12053,7 +6141,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -12065,6 +6153,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -12079,8 +6169,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12088,7 +6178,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -12100,6 +6190,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -12114,8 +6205,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12123,7 +6214,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -12135,6 +6226,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -12149,8 +6242,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12158,7 +6251,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -12170,6 +6263,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -12184,8 +6278,8 @@ graph id 11 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12205,12 +6299,7 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -12224,169 +6313,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 96 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -12420,7 +6346,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -12455,7 +6381,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -12490,7 +6416,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -12513,38 +6439,19 @@ graph ] LabelGraphics [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 15 - target 13 + source 8 + target 7 graphics [ fill "#000000" @@ -12552,7 +6459,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12562,17 +6469,16 @@ graph ] edge [ - source 11 - target 14 + source 10 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eTypeParameters reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12582,17 +6488,16 @@ graph ] edge [ - source 0 - target 11 + source 11 + target 9 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12602,8 +6507,8 @@ graph ] edge [ - source 13 - target 15 + source 5 + target 6 graphics [ fill "#000000" @@ -12612,7 +6517,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12622,8 +6527,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 7 graphics [ fill "#000000" @@ -12632,7 +6537,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12642,8 +6547,8 @@ graph ] edge [ - source 12 - target 13 + source 5 + target 9 graphics [ fill "#000000" @@ -12652,83 +6557,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 12 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "abstract attribute EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "interface attribute EClass" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12738,16 +6567,17 @@ graph ] edge [ - source 11 + source 7 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12757,35 +6587,17 @@ graph ] edge [ - source 0 + source 6 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12795,16 +6607,17 @@ graph ] edge [ - source 0 - target 9 + source 9 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12814,8 +6627,8 @@ graph ] edge [ - source 13 - target 7 + source 6 + target 5 graphics [ fill "#000000" @@ -12823,7 +6636,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12833,8 +6646,8 @@ graph ] edge [ - source 12 - target 7 + source 7 + target 5 graphics [ fill "#000000" @@ -12842,7 +6655,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12852,8 +6665,8 @@ graph ] edge [ - source 0 - target 8 + source 9 + target 5 graphics [ fill "#000000" @@ -12861,7 +6674,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -12985,8 +6798,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -12994,7 +6807,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13006,8 +6819,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -13022,7 +6833,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -13031,7 +6842,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13057,8 +6868,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13066,7 +6877,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13078,6 +6889,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -13092,7 +6904,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -13113,8 +6925,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13129,8 +6941,8 @@ graph id 7 graphics [ - w 112.2 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13138,7 +6950,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13150,6 +6962,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13164,8 +6978,8 @@ graph id 8 graphics [ - w 85.80000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13173,7 +6987,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13185,6 +6999,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13199,8 +7015,8 @@ graph id 9 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13208,7 +7024,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13220,6 +7036,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13234,8 +7052,8 @@ graph id 10 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13243,7 +7061,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13255,6 +7073,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -13263,74 +7082,86 @@ graph borderDistance 6 ] ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 0 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 13 graphics [ - w 254.10000000000002 - h 110 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13338,7 +7169,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13350,12 +7181,6 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class " fontSize 14 fontName "Consolas" @@ -13367,10 +7192,10 @@ graph node [ - id 1 + id 14 graphics [ - w 41.800000000000004 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -13379,7 +7204,7 @@ graph ] LabelGraphics [ - text "true" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13402,10 +7227,10 @@ graph node [ - id 2 + id 15 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -13414,7 +7239,7 @@ graph ] LabelGraphics [ - text "false" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13434,49 +7259,288 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 10 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13484,7 +7548,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13496,6 +7560,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -13507,11 +7572,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13519,7 +7584,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13531,6 +7596,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -13542,11 +7608,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13554,7 +7620,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13566,6 +7632,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -13577,10 +7644,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -13589,7 +7656,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13612,10 +7679,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -13624,7 +7691,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13647,11 +7714,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13659,7 +7726,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13671,6 +7738,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -13682,11 +7750,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13694,7 +7762,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -13706,6 +7774,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13717,11 +7787,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13741,12 +7811,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13758,11 +7824,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13782,12 +7848,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13799,11 +7861,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13823,12 +7885,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EOperation class - ETypedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -13840,11 +7897,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 68 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13864,9 +7921,7 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -13878,11 +7933,11 @@ graph node [ - id 15 + id 11 graphics [ - w 238.70000000000002 - h 40 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -13902,7 +7957,8 @@ graph LabelGraphics [ text " - EStringToStringMapEntry class + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -13914,7 +7970,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -13949,7 +8005,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -13984,7 +8040,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -14019,7 +8075,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -14053,28 +8109,8 @@ graph ] edge [ - source 14 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "details reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 + source 9 + target 6 graphics [ fill "#000000" @@ -14082,7 +8118,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14092,8 +8128,8 @@ graph ] edge [ - source 11 - target 11 + source 10 + target 7 graphics [ fill "#000000" @@ -14101,7 +8137,7 @@ graph ] LabelGraphics [ - text "eSuperTypes reference EClass" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14111,8 +8147,8 @@ graph ] edge [ - source 11 - target 13 + source 5 + target 6 graphics [ fill "#000000" @@ -14121,45 +8157,7 @@ graph ] LabelGraphics [ - text "eOperations reference EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eAllSuperTypes reference EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14169,8 +8167,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 7 graphics [ fill "#000000" @@ -14179,7 +8177,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14189,16 +8187,17 @@ graph ] edge [ - source 13 - target 11 + source 5 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eContainingClass reference EOperation" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14208,7 +8207,7 @@ graph ] edge [ - source 0 + source 5 target 11 graphics [ @@ -14218,7 +8217,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14228,8 +8227,8 @@ graph ] edge [ - source 0 - target 12 + source 6 + target 9 graphics [ fill "#000000" @@ -14238,45 +8237,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14286,54 +8247,17 @@ graph ] edge [ - source 0 + source 7 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14343,8 +8267,8 @@ graph ] edge [ - source 12 - target 8 + source 6 + target 5 graphics [ fill "#000000" @@ -14352,7 +8276,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14362,8 +8286,8 @@ graph ] edge [ - source 0 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -14371,7 +8295,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14381,8 +8305,8 @@ graph ] edge [ - source 13 - target 1 + source 8 + target 5 graphics [ fill "#000000" @@ -14390,7 +8314,7 @@ graph ] LabelGraphics [ - text "unique attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -14400,8 +8324,8 @@ graph ] edge [ - source 13 - target 4 + source 11 + target 5 graphics [ fill "#000000" @@ -14409,7 +8333,7 @@ graph ] LabelGraphics [ - text "upperBound attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 0ea0ef1b..e33711c3 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png 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 cb79481b..fa323f3d 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,10 +1,11 @@ - - -
- - - - - - + + + + + + + + + + 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 77ffa87d..383a7f99 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 @@ -113,8 +113,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -122,7 +122,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -134,8 +134,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -150,7 +148,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -159,7 +157,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -185,8 +183,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -194,7 +192,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -206,6 +204,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -220,7 +219,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -241,8 +240,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -257,8 +256,8 @@ graph id 7 graphics [ - w 112.2 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -266,7 +265,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -278,6 +277,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -292,8 +293,8 @@ graph id 8 graphics [ - w 85.80000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -301,7 +302,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -313,6 +314,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -327,8 +330,8 @@ graph id 9 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -336,7 +339,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -348,6 +351,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -362,102 +366,7 @@ graph id 10 graphics [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 + w 177.10000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -466,7 +375,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -478,7 +387,7 @@ graph LabelGraphics [ text " - FunctionType enum + InformationLink class " fontSize 14 fontName "Consolas" @@ -490,10 +399,10 @@ graph node [ - id 1 + id 11 graphics [ - w 297.0 + w 161.70000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -502,7 +411,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -514,7 +423,7 @@ graph LabelGraphics [ text " - FunctionType enum + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -526,11 +435,11 @@ graph node [ - id 2 + id 12 graphics [ - w 226.60000000000002 - h 40 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -538,7 +447,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -550,7 +459,6 @@ graph LabelGraphics [ text " - FunctionType enum " fontSize 14 fontName "Consolas" @@ -562,11 +470,11 @@ graph node [ - id 3 + id 13 graphics [ - w 361.90000000000003 - h 54 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -574,7 +482,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -586,8 +494,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -599,10 +505,10 @@ graph node [ - id 4 + id 14 graphics [ - w 41.800000000000004 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -611,7 +517,7 @@ graph ] LabelGraphics [ - text "true" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -634,10 +540,10 @@ graph node [ - id 5 + id 15 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -646,7 +552,7 @@ graph ] LabelGraphics [ - text "false" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -666,187 +572,67 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 11 + target 6 + graphics [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 9 + target 7 + graphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 10 + target 7 + graphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ - source 6 - target 3 + source 9 + target 8 graphics [ fill "#000000" @@ -854,7 +640,7 @@ graph ] LabelGraphics [ - text "model reference FunctionalElement" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -864,17 +650,16 @@ graph ] edge [ - source 3 - target 6 + source 10 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -884,16 +669,17 @@ graph ] edge [ - source 6 - target 2 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "type attribute Function" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -901,1768 +687,137 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 5 + target 7 + graphics [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 5 + target 8 + graphics [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" + text "data reference FunctionalInterface" fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 8 + target 9 + graphics [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 8 + target 10 + graphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 7 + target 9 + graphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ source 6 - target 3 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "model reference FunctionalElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2672,17 +827,16 @@ graph ] edge [ - source 3 - target 6 + source 6 + target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2692,8 +846,8 @@ graph ] edge [ - source 6 - target 2 + source 7 + target 5 graphics [ fill "#000000" @@ -2701,7 +855,26 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2824,43 +997,6 @@ graph [ id 3 graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics [ w 41.800000000000004 h 26 @@ -2894,7 +1030,7 @@ graph node [ - id 5 + id 4 graphics [ w 50.6 @@ -2929,11 +1065,11 @@ graph node [ - id 6 + id 5 graphics [ - w 192.50000000000003 - h 54 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2953,113 +1089,7 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -3071,11 +1101,11 @@ graph node [ - id 10 + id 6 graphics [ - w 103.4 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3083,93 +1113,35 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 fontName "Monospace" autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 7 graphics [ - w 226.60000000000002 + w 177.10000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -3178,7 +1150,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3190,7 +1162,7 @@ graph LabelGraphics [ text " - FunctionType enum + InformationLink class " fontSize 14 fontName "Consolas" @@ -3202,10 +1174,10 @@ graph node [ - id 1 + id 8 graphics [ - w 297.0 + w 177.10000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -3214,7 +1186,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3226,7 +1198,7 @@ graph LabelGraphics [ text " - FunctionType enum + InformationLink class " fontSize 14 fontName "Consolas" @@ -3238,11 +1210,11 @@ graph node [ - id 2 + id 9 graphics [ - w 226.60000000000002 - h 40 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3250,7 +1222,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3262,7 +1234,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -3274,10 +1247,10 @@ graph node [ - id 3 + id 10 graphics [ - w 361.90000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -3286,7 +1259,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3298,8 +1271,8 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -3311,10 +1284,46 @@ graph node [ - id 4 + id 11 graphics [ - w 41.800000000000004 + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 h 26 type "rectangle" fill "#FFFFFF" @@ -3323,7 +1332,7 @@ graph ] LabelGraphics [ - text "true" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3346,10 +1355,10 @@ graph node [ - id 5 + id 13 graphics [ - w 50.6 + w 85.80000000000001 h 26 type "rectangle" fill "#FFFFFF" @@ -3358,7 +1367,7 @@ graph ] LabelGraphics [ - text "false" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3381,11 +1390,11 @@ graph node [ - id 6 + id 14 graphics [ - w 192.50000000000003 - h 54 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3393,7 +1402,7 @@ graph ] LabelGraphics [ - text "null" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3405,8 +1414,6 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class " fontSize 14 fontName "Consolas" @@ -3418,10 +1425,10 @@ graph node [ - id 7 + id 15 graphics [ - w 112.2 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -3430,7 +1437,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3450,123 +1457,232 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 6 + target 7 + graphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ source 6 - target 3 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "model reference FunctionalElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3576,8 +1692,8 @@ graph ] edge [ - source 3 - target 6 + source 6 + target 11 graphics [ fill "#000000" @@ -3586,7 +1702,7 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3597,7 +1713,7 @@ graph edge [ source 6 - target 0 + target 5 graphics [ fill "#000000" @@ -3605,7 +1721,7 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3613,162 +1729,54 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 9 + target 5 + graphics [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 10 + target 5 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3776,7 +1784,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3788,6 +1796,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3799,11 +1808,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3811,7 +1820,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3823,6 +1832,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3834,11 +1844,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3846,7 +1856,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3858,6 +1868,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3869,10 +1880,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -3881,7 +1892,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3904,10 +1915,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -3916,7 +1927,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3939,11 +1950,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3951,7 +1962,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3963,6 +1974,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -3974,11 +1986,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3986,7 +1998,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3998,6 +2010,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4009,11 +2023,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4033,13 +2047,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4051,11 +2060,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4075,13 +2084,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4093,11 +2097,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4117,12 +2121,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -4134,11 +2133,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4158,13 +2157,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4176,11 +2170,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4200,13 +2194,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -4218,7 +2206,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -4253,7 +2241,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -4288,7 +2276,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -4323,7 +2311,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -4341,189 +2329,32 @@ graph fontSize 16 fontName "Monospace" autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 13 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 11 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 12 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 0 - target 13 + source 9 + target 7 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4533,8 +2364,8 @@ graph ] edge [ - source 13 - target 0 + source 11 + target 8 graphics [ fill "#000000" @@ -4542,7 +2373,7 @@ graph ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4552,8 +2383,8 @@ graph ] edge [ - source 12 - target 8 + source 11 + target 7 graphics [ fill "#000000" @@ -4561,7 +2392,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4571,16 +2402,17 @@ graph ] edge [ - source 11 + source 5 target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4590,16 +2422,17 @@ graph ] edge [ - source 11 - target 10 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4609,16 +2442,17 @@ graph ] edge [ - source 12 + source 5 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4628,16 +2462,17 @@ graph ] edge [ - source 0 + source 5 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4647,8 +2482,8 @@ graph ] edge [ - source 12 - target 10 + source 7 + target 11 graphics [ fill "#000000" @@ -4656,7 +2491,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4666,16 +2501,17 @@ graph ] edge [ - source 11 - target 10 + source 8 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4685,16 +2521,17 @@ graph ] edge [ - source 13 - target 6 + source 7 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4704,8 +2541,8 @@ graph ] edge [ - source 0 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -4713,7 +2550,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4723,8 +2560,8 @@ graph ] edge [ - source 13 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -4732,7 +2569,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4742,8 +2579,8 @@ graph ] edge [ - source 0 - target 8 + source 8 + target 5 graphics [ fill "#000000" @@ -4751,7 +2588,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4759,231 +2596,35 @@ graph position "thead" ] ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Root literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 297.0 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Intermediate literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 226.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "Leaf literal FunctionType" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionType enum - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 361.90000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 6 + id 0 graphics [ - w 192.50000000000003 - h 54 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4991,7 +2632,7 @@ graph ] LabelGraphics [ - text "null" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5003,8 +2644,7 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5016,11 +2656,11 @@ graph node [ - id 7 + id 1 graphics [ - w 112.2 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5028,7 +2668,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5040,6 +2680,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5051,11 +2692,11 @@ graph node [ - id 8 + id 2 graphics [ - w 85.80000000000001 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5063,7 +2704,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5075,6 +2716,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5086,10 +2728,10 @@ graph node [ - id 9 + id 3 graphics [ - w 103.4 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -5098,7 +2740,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5121,10 +2763,10 @@ graph node [ - id 10 + id 4 graphics [ - w 103.4 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -5133,7 +2775,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5153,73 +2795,13 @@ graph borderDistance 6 ] ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 5 graphics [ - w 226.60000000000002 + w 207.9 h 40 type "rectangle" fill "#FFFFFF" @@ -5228,7 +2810,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5240,7 +2822,7 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -5252,11 +2834,11 @@ graph node [ - id 1 + id 6 graphics [ - w 297.0 - h 40 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5264,7 +2846,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5276,7 +2858,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5288,11 +2871,11 @@ graph node [ - id 2 + id 7 graphics [ - w 226.60000000000002 - h 40 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5300,7 +2883,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5312,7 +2895,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5324,10 +2908,10 @@ graph node [ - id 3 + id 8 graphics [ - w 361.90000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -5336,7 +2920,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5348,8 +2932,8 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5361,11 +2945,11 @@ graph node [ - id 4 + id 9 graphics [ - w 41.800000000000004 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5373,7 +2957,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5385,6 +2969,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -5396,11 +2981,11 @@ graph node [ - id 5 + id 10 graphics [ - w 50.6 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5408,7 +2993,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5420,6 +3005,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -5431,10 +3017,10 @@ graph node [ - id 6 + id 11 graphics [ - w 192.50000000000003 + w 177.10000000000002 h 54 type "rectangle" fill "#FFFFFF" @@ -5455,8 +3041,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5468,7 +3054,7 @@ graph node [ - id 7 + id 12 graphics [ w 112.2 @@ -5503,7 +3089,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -5538,7 +3124,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -5573,7 +3159,7 @@ graph node [ - id 10 + id 15 graphics [ w 103.4 @@ -5606,17 +3192,136 @@ graph ] ] edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge [ source 6 - target 3 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "model reference FunctionalElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5626,8 +3331,8 @@ graph ] edge [ - source 3 - target 6 + source 7 + target 10 graphics [ fill "#000000" @@ -5636,7 +3341,7 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5647,7 +3352,7 @@ graph edge [ source 6 - target 1 + target 5 graphics [ fill "#000000" @@ -5655,7 +3360,64 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5671,8 +3433,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5680,7 +3442,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5692,12 +3454,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5712,8 +3469,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5721,7 +3478,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5733,6 +3490,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5747,8 +3505,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5756,7 +3514,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5768,6 +3526,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5782,7 +3541,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -5791,7 +3550,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5817,7 +3576,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -5826,7 +3585,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5852,8 +3611,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5861,7 +3620,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5873,6 +3632,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -5887,8 +3647,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5896,7 +3656,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5908,6 +3668,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -5922,148 +3684,8 @@ graph id 7 graphics [ - w 33.0 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text ""B"" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 8 - graphics - [ - w 94.60000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text ""nsPrefix"" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 9 - graphics - [ - w 68.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text ""nsUri"" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 10 - graphics - [ - w 121.00000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text ""packageName"" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 11 - graphics - [ - w 269.5 - h 110 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6083,12 +3705,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -6100,11 +3717,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 68 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6124,9 +3741,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6138,11 +3754,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6162,12 +3778,7 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -6179,11 +3790,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6203,12 +3814,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6220,11 +3827,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 68 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6244,9 +3851,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6258,7 +3864,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -6293,7 +3899,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -6328,7 +3934,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -6363,7 +3969,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -6397,35 +4003,17 @@ graph ] edge [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 0 + source 6 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6435,8 +4023,8 @@ graph ] edge [ - source 11 - target 0 + source 6 + target 5 graphics [ fill "#000000" @@ -6444,7 +4032,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6454,16 +4042,17 @@ graph ] edge [ - source 13 - target 0 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "ePackage reference EClassifier" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6473,8 +4062,8 @@ graph ] edge [ - source 14 - target 0 + source 9 + target 8 graphics [ fill "#000000" @@ -6482,7 +4071,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6492,8 +4081,8 @@ graph ] edge [ - source 0 - target 12 + source 7 + target 8 graphics [ fill "#000000" @@ -6502,7 +4091,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6512,8 +4101,8 @@ graph ] edge [ - source 0 - target 15 + source 7 + target 10 graphics [ fill "#000000" @@ -6522,7 +4111,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6532,7 +4121,7 @@ graph ] edge [ - source 0 + source 7 target 11 graphics [ @@ -6542,7 +4131,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6552,17 +4141,16 @@ graph ] edge [ - source 0 - target 13 + source 7 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6572,8 +4160,8 @@ graph ] edge [ - source 0 - target 14 + source 8 + target 9 graphics [ fill "#000000" @@ -6582,7 +4170,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6592,7 +4180,7 @@ graph ] edge [ - source 12 + source 8 target 7 graphics [ @@ -6601,26 +4189,7 @@ graph ] LabelGraphics [ - text "source attribute EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6630,27 +4199,8 @@ graph ] edge [ - source 11 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceTypeName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 10 + source 10 + target 7 graphics [ fill "#000000" @@ -6658,7 +4208,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6669,64 +4219,7 @@ graph edge [ source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 + target 7 graphics [ fill "#000000" @@ -6734,7 +4227,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6744,179 +4237,33 @@ graph ] edge [ - source 0 - target 8 + source 6 + target 2 graphics [ fill "#000000" targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node + ] + LabelGraphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6924,7 +4271,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6936,6 +4283,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6947,11 +4295,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6959,7 +4307,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6971,6 +4319,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6982,11 +4331,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6994,7 +4343,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7006,6 +4355,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7017,10 +4367,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -7029,7 +4379,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7052,10 +4402,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -7064,7 +4414,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7087,11 +4437,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7099,7 +4449,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7111,6 +4461,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -7122,11 +4473,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7134,7 +4485,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7146,6 +4497,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -7157,11 +4510,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 124 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7181,13 +4534,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -7199,11 +4546,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7223,13 +4570,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7241,11 +4583,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7265,11 +4607,7 @@ graph LabelGraphics [ text " - EEnumLiteral class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7281,11 +4619,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 68 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7305,9 +4643,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7319,11 +4656,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7343,11 +4680,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7359,7 +4692,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -7394,7 +4727,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -7429,7 +4762,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -7442,180 +4775,64 @@ graph LabelGraphics [ text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 19 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eTypeParameters reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 13 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eLiterals reference EEnum" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "eEnum reference EEnumLiteral" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 0 - target 14 + source 6 + target 7 graphics [ fill "#000000" @@ -7624,7 +4841,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7634,17 +4851,16 @@ graph ] edge [ - source 0 - target 11 + source 6 + target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7654,8 +4870,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 6 graphics [ fill "#000000" @@ -7664,26 +4880,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source attribute EAnnotation" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7693,7 +4890,7 @@ graph ] edge [ - source 11 + source 9 target 8 graphics [ @@ -7702,7 +4899,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7713,7 +4910,7 @@ graph edge [ source 11 - target 9 + target 10 graphics [ fill "#000000" @@ -7721,7 +4918,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7731,16 +4928,17 @@ graph ] edge [ - source 12 - target 9 + source 7 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7750,16 +4948,17 @@ graph ] edge [ - source 11 - target 2 + source 7 + target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "serializable attribute EDataType" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7769,8 +4968,8 @@ graph ] edge [ - source 12 - target 2 + source 7 + target 6 graphics [ fill "#000000" @@ -7778,7 +4977,7 @@ graph ] LabelGraphics [ - text "serializable attribute EDataType" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7788,16 +4987,17 @@ graph ] edge [ - source 13 + source 8 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "literal attribute EEnumLiteral" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7807,16 +5007,17 @@ graph ] edge [ - source 0 - target 10 + source 10 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7826,8 +5027,8 @@ graph ] edge [ - source 12 - target 10 + source 8 + target 7 graphics [ fill "#000000" @@ -7835,7 +5036,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7845,8 +5046,8 @@ graph ] edge [ - source 0 - target 9 + source 10 + target 7 graphics [ fill "#000000" @@ -7854,7 +5055,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7864,8 +5065,8 @@ graph ] edge [ - source 0 - target 8 + source 6 + target 0 graphics [ fill "#000000" @@ -7873,7 +5074,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "type attribute Function" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7889,8 +5090,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7898,7 +5099,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7910,12 +5111,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7930,8 +5126,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7939,7 +5135,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -7951,6 +5147,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -7965,148 +5162,8 @@ graph id 2 graphics [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 4 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "0" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 5 - graphics - [ - w 15.400000000000002 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 6 - graphics - [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8114,7 +5171,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8126,6 +5183,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -8137,10 +5195,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -8149,7 +5207,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8172,10 +5230,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -8184,7 +5242,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8207,11 +5265,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8219,7 +5277,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8231,6 +5289,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -8242,11 +5301,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8254,7 +5313,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -8266,6 +5325,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -8277,11 +5338,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8301,12 +5362,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -8318,11 +5374,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8342,12 +5398,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8359,11 +5411,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8383,13 +5435,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8401,11 +5448,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8425,11 +5472,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -8441,11 +5484,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 68 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -8465,9 +5508,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -8479,7 +5521,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -8514,7 +5556,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -8549,7 +5591,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -8584,7 +5626,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -8618,35 +5660,17 @@ graph ] edge [ - source 15 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 + source 6 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "ePackage reference EClassifier" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8656,8 +5680,8 @@ graph ] edge [ - source 13 - target 0 + source 6 + target 5 graphics [ fill "#000000" @@ -8665,7 +5689,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8675,8 +5699,8 @@ graph ] edge [ - source 13 - target 14 + source 5 + target 6 graphics [ fill "#000000" @@ -8685,7 +5709,7 @@ graph ] LabelGraphics [ - text "eTypeParameters reference EClassifier" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8695,17 +5719,16 @@ graph ] edge [ - source 0 - target 15 + source 10 + target 9 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8715,8 +5738,8 @@ graph ] edge [ - source 0 - target 11 + source 7 + target 8 graphics [ fill "#000000" @@ -8725,7 +5748,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8735,8 +5758,8 @@ graph ] edge [ - source 0 - target 13 + source 7 + target 9 graphics [ fill "#000000" @@ -8745,7 +5768,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8755,8 +5778,8 @@ graph ] edge [ - source 0 - target 12 + source 7 + target 11 graphics [ fill "#000000" @@ -8765,26 +5788,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8794,7 +5798,7 @@ graph ] edge [ - source 11 + source 7 target 6 graphics [ @@ -8803,45 +5807,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 1 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "serializable attribute EDataType" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8851,54 +5817,17 @@ graph ] edge [ - source 0 + source 9 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8908,8 +5837,8 @@ graph ] edge [ - source 12 - target 10 + source 8 + target 7 graphics [ fill "#000000" @@ -8917,7 +5846,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8927,8 +5856,8 @@ graph ] edge [ - source 0 - target 8 + source 9 + target 7 graphics [ fill "#000000" @@ -8936,7 +5865,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -8945,180 +5874,53 @@ graph ] ] edge - [ - source 12 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 6 + target 0 + graphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9126,7 +5928,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9138,6 +5940,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9149,11 +5952,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9161,7 +5964,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9173,6 +5976,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9184,11 +5988,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9196,7 +6000,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9208,6 +6012,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -9219,10 +6024,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -9231,7 +6036,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9254,10 +6059,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -9266,7 +6071,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9289,11 +6094,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9301,7 +6106,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9313,6 +6118,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -9324,11 +6130,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9336,7 +6142,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -9348,6 +6154,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -9359,11 +6167,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9383,12 +6191,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -9400,11 +6204,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9424,12 +6228,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -9441,11 +6240,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9465,12 +6264,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -9482,11 +6277,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 96 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9506,11 +6301,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -9522,11 +6313,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -9546,12 +6337,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -9563,7 +6350,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -9598,7 +6385,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -9633,7 +6420,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -9668,7 +6455,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -9691,126 +6478,27 @@ graph ] LabelGraphics [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 13 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eTypeParameters reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 11 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ - source 0 - target 12 + source 8 + target 7 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9820,17 +6508,16 @@ graph ] edge [ - source 12 - target 13 + source 10 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9840,16 +6527,17 @@ graph ] edge [ - source 12 - target 0 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9859,16 +6547,17 @@ graph ] edge [ - source 13 - target 12 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9878,16 +6567,17 @@ graph ] edge [ - source 11 - target 1 + source 5 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "abstract attribute EClass" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9897,16 +6587,17 @@ graph ] edge [ - source 11 - target 2 + source 5 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "interface attribute EClass" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9916,35 +6607,17 @@ graph ] edge [ - source 11 + source 7 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceTypeName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9954,35 +6627,17 @@ graph ] edge [ - source 0 + source 6 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -9992,8 +6647,8 @@ graph ] edge [ - source 0 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -10001,7 +6656,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10011,8 +6666,8 @@ graph ] edge [ - source 13 - target 7 + source 7 + target 5 graphics [ fill "#000000" @@ -10020,7 +6675,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10030,8 +6685,8 @@ graph ] edge [ - source 12 - target 7 + source 9 + target 5 graphics [ fill "#000000" @@ -10039,7 +6694,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10049,8 +6704,8 @@ graph ] edge [ - source 0 - target 8 + source 11 + target 5 graphics [ fill "#000000" @@ -10058,7 +6713,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10182,8 +6837,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10191,7 +6846,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10203,8 +6858,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -10219,7 +6872,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -10228,7 +6881,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10254,8 +6907,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10263,7 +6916,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10275,6 +6928,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -10289,7 +6943,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -10310,8 +6964,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10325,6 +6979,190 @@ graph [ id 7 graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics [ w 112.2 h 26 @@ -10358,7 +7196,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -10393,7 +7231,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -10428,7 +7266,7 @@ graph node [ - id 10 + id 15 graphics [ w 103.4 @@ -10462,8 +7300,8 @@ graph ] edge [ - source 6 - target 3 + source 11 + target 9 graphics [ fill "#000000" @@ -10471,7 +7309,7 @@ graph ] LabelGraphics [ - text "model reference FunctionalElement" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10481,7 +7319,7 @@ graph ] edge [ - source 3 + source 5 target 6 graphics [ @@ -10491,7 +7329,107 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10502,7 +7440,7 @@ graph edge [ source 6 - target 1 + target 5 graphics [ fill "#000000" @@ -10510,7 +7448,7 @@ graph ] LabelGraphics [ - text "type attribute Function" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -10518,162 +7456,92 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 7 + target 5 + graphics [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 8 + target 5 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10681,7 +7549,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10693,6 +7561,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10704,11 +7573,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10716,7 +7585,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10728,6 +7597,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10739,11 +7609,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10751,7 +7621,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10763,6 +7633,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -10774,10 +7645,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -10786,7 +7657,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10809,10 +7680,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -10821,7 +7692,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10844,11 +7715,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10856,7 +7727,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10868,6 +7739,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -10879,11 +7751,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10891,7 +7763,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -10903,6 +7775,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10914,11 +7788,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10938,12 +7812,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10955,11 +7825,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -10979,12 +7849,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -10996,11 +7862,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11020,12 +7886,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EOperation class - ETypedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -11037,11 +7898,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 68 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11061,9 +7922,7 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -11075,11 +7934,11 @@ graph node [ - id 15 + id 11 graphics [ - w 238.70000000000002 - h 40 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -11099,7 +7958,8 @@ graph LabelGraphics [ text " - EStringToStringMapEntry class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -11111,7 +7971,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -11146,7 +8006,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -11181,7 +8041,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -11216,7 +8076,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -11250,28 +8110,8 @@ graph ] edge [ - source 14 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "details reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 + source 9 + target 6 graphics [ fill "#000000" @@ -11279,7 +8119,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11289,8 +8129,8 @@ graph ] edge [ - source 11 - target 11 + source 10 + target 7 graphics [ fill "#000000" @@ -11298,7 +8138,7 @@ graph ] LabelGraphics [ - text "eSuperTypes reference EClass" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11308,8 +8148,8 @@ graph ] edge [ - source 11 - target 13 + source 5 + target 6 graphics [ fill "#000000" @@ -11318,45 +8158,7 @@ graph ] LabelGraphics [ - text "eOperations reference EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eAllSuperTypes reference EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11366,8 +8168,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 7 graphics [ fill "#000000" @@ -11376,26 +8178,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eContainingClass reference EOperation" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11405,8 +8188,8 @@ graph ] edge [ - source 0 - target 11 + source 5 + target 8 graphics [ fill "#000000" @@ -11415,7 +8198,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11425,8 +8208,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 11 graphics [ fill "#000000" @@ -11435,45 +8218,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11483,16 +8228,17 @@ graph ] edge [ - source 11 + source 6 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11502,54 +8248,17 @@ graph ] edge [ - source 0 + source 7 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11559,8 +8268,8 @@ graph ] edge [ - source 12 - target 8 + source 6 + target 5 graphics [ fill "#000000" @@ -11568,7 +8277,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11578,8 +8287,8 @@ graph ] edge [ - source 0 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -11587,7 +8296,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11597,8 +8306,8 @@ graph ] edge [ - source 13 - target 1 + source 8 + target 5 graphics [ fill "#000000" @@ -11606,7 +8315,7 @@ graph ] LabelGraphics [ - text "unique attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -11616,8 +8325,8 @@ graph ] edge [ - source 13 - target 4 + source 11 + target 5 graphics [ fill "#000000" @@ -11625,7 +8334,7 @@ graph ] LabelGraphics [ - text "upperBound attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 b5fea093..05355ee6 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png 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 4a9086fe..956b6f1b 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,10 +1,11 @@ - - -
- - - - - - + + + + + + + + + + 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 55dc70ba..ed77ebc2 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 @@ -113,8 +113,8 @@ graph id 3 graphics [ - w 361.90000000000003 - h 54 + w 41.800000000000004 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -122,7 +122,7 @@ graph ] LabelGraphics [ - text "o 1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -134,8 +134,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -150,7 +148,7 @@ graph id 4 graphics [ - w 41.800000000000004 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -159,7 +157,7 @@ graph ] LabelGraphics [ - text "true" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -185,8 +183,8 @@ graph id 5 graphics [ - w 50.6 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -194,7 +192,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -206,6 +204,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -220,7 +219,7 @@ graph id 6 graphics [ - w 192.50000000000003 + w 184.8 h 54 type "rectangle" fill "#FFFFFF" @@ -241,8 +240,8 @@ graph LabelGraphics [ text " - FunctionalElement class - Function class + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -257,8 +256,8 @@ graph id 7 graphics [ - w 112.2 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -266,7 +265,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -278,6 +277,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -292,8 +293,8 @@ graph id 8 graphics [ - w 85.80000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -301,7 +302,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -313,6 +314,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -327,8 +330,8 @@ graph id 9 graphics [ - w 103.4 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -336,7 +339,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -348,6 +351,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -362,102 +366,7 @@ graph id 10 graphics [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 6 - target 3 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "model reference FunctionalElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "rootElements reference FunctionalArchitectureModel" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "type attribute Function" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 226.60000000000002 + w 177.10000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -466,7 +375,7 @@ graph ] LabelGraphics [ - text "Root literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -478,7 +387,7 @@ graph LabelGraphics [ text " - FunctionType enum + InformationLink class " fontSize 14 fontName "Consolas" @@ -490,11 +399,11 @@ graph node [ - id 1 + id 11 graphics [ - w 297.0 - h 40 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -502,7 +411,7 @@ graph ] LabelGraphics [ - text "Intermediate literal FunctionType" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -514,7 +423,8 @@ graph LabelGraphics [ text " - FunctionType enum + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -526,11 +436,11 @@ graph node [ - id 2 + id 12 graphics [ - w 226.60000000000002 - h 40 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -538,7 +448,7 @@ graph ] LabelGraphics [ - text "Leaf literal FunctionType" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -550,7 +460,6 @@ graph LabelGraphics [ text " - FunctionType enum " fontSize 14 fontName "Consolas" @@ -562,11 +471,11 @@ graph node [ - id 3 + id 13 graphics [ - w 361.90000000000003 - h 54 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -574,7 +483,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -586,8 +495,6 @@ graph LabelGraphics [ text " - FunctionalArchitectureModel class DefinedPart - FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -599,10 +506,10 @@ graph node [ - id 4 + id 14 graphics [ - w 41.800000000000004 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -611,7 +518,7 @@ graph ] LabelGraphics [ - text "true" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -634,10 +541,10 @@ graph node [ - id 5 + id 15 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -646,7 +553,7 @@ graph ] LabelGraphics [ - text "false" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -666,187 +573,67 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 9 + target 7 + graphics [ - id 6 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FunctionalElement class - Function class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 7 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 10 + target 7 + graphics [ - id 8 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 9 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 9 + target 8 + graphics [ - id 10 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] + ] edge [ - source 6 - target 3 + source 10 + target 8 graphics [ fill "#000000" @@ -854,7 +641,7 @@ graph ] LabelGraphics [ - text "model reference FunctionalElement" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -864,7 +651,7 @@ graph ] edge [ - source 3 + source 5 target 6 graphics [ @@ -874,7 +661,7 @@ graph ] LabelGraphics [ - text "rootElements reference FunctionalArchitectureModel" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -884,16 +671,17 @@ graph ] edge [ - source 6 - target 0 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "type attribute Function" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -901,162 +689,210 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 5 + target 8 + graphics [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 5 + target 11 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1064,7 +900,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1076,6 +912,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1087,11 +924,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1099,7 +936,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1111,6 +948,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1122,11 +960,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1134,7 +972,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1146,6 +984,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1157,10 +996,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -1169,7 +1008,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1192,10 +1031,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -1204,7 +1043,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1227,11 +1066,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1239,7 +1078,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1251,6 +1090,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -1262,11 +1102,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1274,7 +1114,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1286,6 +1126,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1297,11 +1139,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1321,13 +1163,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -1339,11 +1175,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1363,13 +1199,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -1381,11 +1211,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1405,12 +1235,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1422,11 +1248,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 124 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1446,13 +1272,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1464,11 +1285,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1488,13 +1309,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1506,7 +1322,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -1541,7 +1357,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -1576,7 +1392,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -1611,7 +1427,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -1645,8 +1461,8 @@ graph ] edge [ - source 11 - target 0 + source 7 + target 6 graphics [ fill "#000000" @@ -1654,7 +1470,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1664,8 +1480,8 @@ graph ] edge [ - source 12 - target 0 + source 8 + target 6 graphics [ fill "#000000" @@ -1673,7 +1489,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1683,8 +1499,8 @@ graph ] edge [ - source 14 - target 0 + source 7 + target 9 graphics [ fill "#000000" @@ -1692,7 +1508,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1702,8 +1518,8 @@ graph ] edge [ - source 15 - target 13 + source 8 + target 11 graphics [ fill "#000000" @@ -1711,7 +1527,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1721,8 +1537,8 @@ graph ] edge [ - source 0 - target 11 + source 5 + target 6 graphics [ fill "#000000" @@ -1731,7 +1547,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1741,8 +1557,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 9 graphics [ fill "#000000" @@ -1751,7 +1567,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1761,8 +1577,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 10 graphics [ fill "#000000" @@ -1771,7 +1587,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1781,8 +1597,8 @@ graph ] edge [ - source 13 - target 15 + source 5 + target 11 graphics [ fill "#000000" @@ -1791,7 +1607,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1801,17 +1617,16 @@ graph ] edge [ - source 0 - target 13 + source 9 + target 7 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1821,8 +1636,8 @@ graph ] edge [ - source 13 - target 0 + source 11 + target 8 graphics [ fill "#000000" @@ -1830,7 +1645,7 @@ graph ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1840,16 +1655,17 @@ graph ] edge [ - source 12 - target 8 + source 6 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1859,35 +1675,17 @@ graph ] edge [ - source 11 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceClassName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 10 + source 6 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1897,8 +1695,8 @@ graph ] edge [ - source 12 - target 8 + source 6 + target 5 graphics [ fill "#000000" @@ -1906,7 +1704,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1916,8 +1714,8 @@ graph ] edge [ - source 0 - target 10 + source 9 + target 5 graphics [ fill "#000000" @@ -1925,7 +1723,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1935,8 +1733,8 @@ graph ] edge [ - source 12 - target 10 + source 10 + target 5 graphics [ fill "#000000" @@ -1944,7 +1742,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1955,102 +1753,7 @@ graph edge [ source 11 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 6 + target 5 graphics [ fill "#000000" @@ -2058,7 +1761,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2074,8 +1777,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2083,7 +1786,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2095,12 +1798,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -2115,8 +1813,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2124,7 +1822,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2136,6 +1834,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -2150,8 +1849,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2159,7 +1858,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2171,6 +1870,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -2185,7 +1885,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -2194,7 +1894,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2220,7 +1920,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -2229,7 +1929,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2255,8 +1955,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2264,7 +1964,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2276,6 +1976,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -2290,8 +1991,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2299,7 +2000,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2311,6 +2012,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -2325,8 +2028,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2334,7 +2037,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2346,6 +2049,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -2360,8 +2065,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2369,7 +2074,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2381,6 +2086,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -2395,8 +2102,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2404,7 +2111,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2416,6 +2123,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -2430,8 +2138,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2439,7 +2147,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2451,6 +2159,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -2465,8 +2175,8 @@ graph id 11 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2486,12 +2196,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -2506,8 +2211,8 @@ graph id 12 graphics [ - w 269.5 - h 68 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2515,7 +2220,7 @@ graph ] LabelGraphics [ - text "null" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2527,9 +2232,6 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2544,8 +2246,8 @@ graph id 13 graphics [ - w 269.5 - h 110 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2553,7 +2255,7 @@ graph ] LabelGraphics [ - text "null" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2565,12 +2267,6 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2585,8 +2281,8 @@ graph id 14 graphics [ - w 269.5 - h 110 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2594,7 +2290,7 @@ graph ] LabelGraphics [ - text "null" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2606,12 +2302,6 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2626,8 +2316,8 @@ graph id 15 graphics [ - w 269.5 - h 68 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2635,7 +2325,7 @@ graph ] LabelGraphics [ - text "null" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2647,9 +2337,6 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2658,314 +2345,37 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 9 + target 7 + graphics [ - id 16 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 17 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node - [ - id 18 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 19 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 12 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eAnnotations reference EModelElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eAnnotations reference EModelElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 11 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 13 - graphics + ] + edge + [ + source 11 + target 10 + graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2975,8 +2385,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 6 graphics [ fill "#000000" @@ -2985,7 +2395,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2995,16 +2405,17 @@ graph ] edge [ - source 12 + source 5 target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "source attribute EAnnotation" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3014,16 +2425,17 @@ graph ] edge [ - source 11 + source 5 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3033,16 +2445,17 @@ graph ] edge [ - source 14 + source 5 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3052,35 +2465,17 @@ graph ] edge [ - source 11 + source 7 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3090,16 +2485,17 @@ graph ] edge [ - source 11 - target 8 + source 10 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3109,8 +2505,8 @@ graph ] edge [ - source 13 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -3118,7 +2514,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3128,8 +2524,8 @@ graph ] edge [ - source 14 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -3137,7 +2533,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3147,8 +2543,8 @@ graph ] edge [ - source 0 - target 9 + source 8 + target 5 graphics [ fill "#000000" @@ -3156,7 +2552,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3166,8 +2562,8 @@ graph ] edge [ - source 0 - target 8 + source 10 + target 5 graphics [ fill "#000000" @@ -3175,7 +2571,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3191,8 +2587,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3200,7 +2596,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3212,12 +2608,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3232,8 +2623,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3241,7 +2632,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3253,6 +2644,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3267,8 +2659,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3276,7 +2668,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3288,6 +2680,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -3302,7 +2695,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -3311,7 +2704,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3337,7 +2730,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -3346,7 +2739,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3372,8 +2765,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3381,7 +2774,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3393,6 +2786,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -3407,8 +2801,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3416,7 +2810,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3428,6 +2822,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -3442,8 +2838,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3451,7 +2847,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3463,6 +2859,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -3477,8 +2875,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3486,7 +2884,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3498,6 +2896,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -3512,8 +2912,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3521,7 +2921,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3533,6 +2933,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -3547,8 +2948,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3556,7 +2957,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3568,6 +2969,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -3582,8 +2984,8 @@ graph id 11 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3603,13 +3005,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -3623,166 +3019,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 96 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EEnumLiteral class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 68 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 96 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -3816,7 +3052,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -3851,7 +3087,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -3886,7 +3122,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -3920,8 +3156,8 @@ graph ] edge [ - source 14 - target 0 + source 9 + target 6 graphics [ fill "#000000" @@ -3929,7 +3165,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3939,8 +3175,8 @@ graph ] edge [ - source 11 - target 0 + source 10 + target 7 graphics [ fill "#000000" @@ -3948,7 +3184,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3958,8 +3194,8 @@ graph ] edge [ - source 12 - target 0 + source 11 + target 6 graphics [ fill "#000000" @@ -3967,7 +3203,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3977,17 +3213,16 @@ graph ] edge [ - source 12 - target 15 + source 11 + target 7 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eTypeParameters reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3997,8 +3232,8 @@ graph ] edge [ - source 11 - target 13 + source 5 + target 6 graphics [ fill "#000000" @@ -4007,7 +3242,7 @@ graph ] LabelGraphics [ - text "eLiterals reference EEnum" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4017,16 +3252,17 @@ graph ] edge [ - source 13 - target 11 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eEnum reference EEnumLiteral" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4036,8 +3272,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 8 graphics [ fill "#000000" @@ -4046,7 +3282,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4056,17 +3292,16 @@ graph ] edge [ - source 0 + source 7 target 11 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4076,8 +3311,8 @@ graph ] edge [ - source 0 - target 12 + source 6 + target 11 graphics [ fill "#000000" @@ -4086,7 +3321,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4096,16 +3331,17 @@ graph ] edge [ - source 14 - target 10 + source 6 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "source attribute EAnnotation" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4115,16 +3351,17 @@ graph ] edge [ - source 11 - target 8 + source 7 + target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4134,8 +3371,8 @@ graph ] edge [ - source 12 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -4143,7 +3380,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4153,8 +3390,8 @@ graph ] edge [ - source 11 - target 9 + source 7 + target 5 graphics [ fill "#000000" @@ -4162,7 +3399,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4172,8 +3409,8 @@ graph ] edge [ - source 12 - target 9 + source 8 + target 5 graphics [ fill "#000000" @@ -4181,7 +3418,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4189,190 +3426,52 @@ graph position "thead" ] ] - edge - [ - source 11 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics +] +graph +[ + node [ - text "serializable attribute EDataType" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 12 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "serializable attribute EDataType" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "literal attribute EEnumLiteral" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node + + node [ id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4380,7 +3479,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4392,6 +3491,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -4406,8 +3506,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4415,7 +3515,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4427,6 +3527,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -4441,7 +3542,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -4450,7 +3551,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4476,7 +3577,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -4485,7 +3586,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4511,8 +3612,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 269.5 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4520,7 +3621,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4532,6 +3633,7 @@ graph LabelGraphics [ text " + FunctionalArchitectureModel class " fontSize 14 fontName "Consolas" @@ -4546,8 +3648,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 192.50000000000003 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4555,7 +3657,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4567,6 +3669,8 @@ graph LabelGraphics [ text " + FunctionalElement class + Function class " fontSize 14 fontName "Consolas" @@ -4581,8 +3685,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4590,7 +3694,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4602,6 +3706,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -4616,8 +3721,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4625,7 +3730,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4637,6 +3742,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4651,8 +3758,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4660,7 +3767,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4672,6 +3779,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -4686,8 +3794,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4695,7 +3803,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4707,6 +3815,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -4721,8 +3831,8 @@ graph id 11 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4742,12 +3852,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -4762,8 +3867,8 @@ graph id 12 graphics [ - w 269.5 - h 110 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4771,7 +3876,7 @@ graph ] LabelGraphics [ - text "null" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4783,12 +3888,6 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4803,8 +3902,8 @@ graph id 13 graphics [ - w 269.5 - h 124 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4812,7 +3911,7 @@ graph ] LabelGraphics [ - text "null" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4824,13 +3923,6 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4845,8 +3937,8 @@ graph id 14 graphics [ - w 269.5 - h 96 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4854,7 +3946,7 @@ graph ] LabelGraphics [ - text "null" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4866,11 +3958,6 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4885,8 +3972,8 @@ graph id 15 graphics [ - w 269.5 - h 68 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4894,7 +3981,7 @@ graph ] LabelGraphics [ - text "null" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4906,9 +3993,6 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4917,158 +4001,19 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 6 + target 7 + graphics [ - id 16 - graphics - [ - w 112.2 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Integers" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 17 - graphics - [ - w 85.80000000000001 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Reals" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 18 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Strings" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 19 - graphics - [ - w 103.4 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 15 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" + text "interface reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5078,8 +4023,8 @@ graph ] edge [ - source 11 - target 0 + source 6 + target 5 graphics [ fill "#000000" @@ -5087,7 +4032,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "model reference FunctionalElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5097,16 +4042,17 @@ graph ] edge [ - source 13 - target 0 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "ePackage reference EClassifier" + text "rootElements reference FunctionalArchitectureModel" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5116,17 +4062,16 @@ graph ] edge [ - source 13 - target 14 + source 9 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eTypeParameters reference EClassifier" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5136,17 +4081,16 @@ graph ] edge [ - source 0 - target 15 + source 11 + target 10 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5156,8 +4100,8 @@ graph ] edge [ - source 0 - target 11 + source 7 + target 8 graphics [ fill "#000000" @@ -5166,7 +4110,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5176,8 +4120,8 @@ graph ] edge [ - source 0 - target 13 + source 7 + target 10 graphics [ fill "#000000" @@ -5186,7 +4130,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5196,17 +4140,16 @@ graph ] edge [ - source 0 - target 12 + source 7 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eSubpackages reference EPackage" + text "element reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5216,16 +4159,17 @@ graph ] edge [ - source 12 - target 0 + source 8 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "eSuperPackage reference EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5235,16 +4179,17 @@ graph ] edge [ - source 15 - target 6 + source 10 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "source attribute EAnnotation" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5254,8 +4199,8 @@ graph ] edge [ - source 11 - target 6 + source 8 + target 7 graphics [ fill "#000000" @@ -5263,7 +4208,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5273,7 +4218,7 @@ graph ] edge [ - source 13 + source 10 target 7 graphics [ @@ -5282,7 +4227,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5292,8 +4237,8 @@ graph ] edge [ - source 11 - target 1 + source 6 + target 2 graphics [ fill "#000000" @@ -5301,7 +4246,7 @@ graph ] LabelGraphics [ - text "serializable attribute EDataType" + text "type attribute Function" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -5309,130 +4254,2035 @@ graph position "thead" ] ] - edge - [ - source 0 - target 10 - graphics +] +graph +[ + node [ - fill "#000000" - targetArrow "standard" + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 12 - target 6 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] edge [ - source 0 + source 7 target 9 graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics [ fill "#000000" targetArrow "standard" ] - LabelGraphics + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 12 - target 10 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 0 - target 8 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 6 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 12 - target 8 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 8 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 10 graphics [ - w 254.10000000000002 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5440,7 +6290,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5452,12 +6302,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -5469,11 +6314,11 @@ graph node [ - id 1 + id 11 graphics [ - w 41.800000000000004 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5481,7 +6326,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5493,6 +6338,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5504,10 +6351,10 @@ graph node [ - id 2 + id 12 graphics [ - w 50.6 + w 112.2 h 26 type "rectangle" fill "#FFFFFF" @@ -5516,7 +6363,7 @@ graph ] LabelGraphics [ - text "false" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5539,10 +6386,10 @@ graph node [ - id 3 + id 13 graphics [ - w 24.200000000000003 + w 85.80000000000001 h 26 type "rectangle" fill "#FFFFFF" @@ -5551,7 +6398,7 @@ graph ] LabelGraphics [ - text "-1" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5574,10 +6421,10 @@ graph node [ - id 4 + id 14 graphics [ - w 15.400000000000002 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -5586,7 +6433,7 @@ graph ] LabelGraphics [ - text "0" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5609,10 +6456,10 @@ graph node [ - id 5 + id 15 graphics [ - w 15.400000000000002 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -5621,7 +6468,7 @@ graph ] LabelGraphics [ - text "1" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5641,14 +6488,250 @@ graph borderDistance 6 ] ] - + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 6 + id 0 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5656,7 +6739,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5668,6 +6751,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5679,11 +6763,11 @@ graph node [ - id 7 + id 1 graphics [ - w 33.0 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5691,7 +6775,7 @@ graph ] LabelGraphics [ - text ""B"" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5703,6 +6787,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5714,11 +6799,11 @@ graph node [ - id 8 + id 2 graphics [ - w 94.60000000000001 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5726,7 +6811,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5738,6 +6823,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -5749,10 +6835,10 @@ graph node [ - id 9 + id 3 graphics [ - w 68.2 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -5761,7 +6847,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5784,10 +6870,10 @@ graph node [ - id 10 + id 4 graphics [ - w 121.00000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -5796,7 +6882,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -5819,11 +6905,11 @@ graph node [ - id 11 + id 5 graphics [ - w 269.5 - h 110 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5843,12 +6929,7 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -5860,11 +6941,11 @@ graph node [ - id 12 + id 6 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5884,12 +6965,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5901,11 +6978,11 @@ graph node [ - id 13 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5925,12 +7002,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5942,11 +7015,11 @@ graph node [ - id 14 + id 8 graphics [ - w 269.5 - h 96 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -5966,11 +7039,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - ETypeParameter class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -5982,11 +7052,11 @@ graph node [ - id 15 + id 9 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6006,12 +7076,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6023,11 +7089,11 @@ graph node [ - id 16 + id 10 graphics [ - w 112.2 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6035,7 +7101,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6047,6 +7113,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6058,11 +7126,11 @@ graph node [ - id 17 + id 11 graphics [ - w 85.80000000000001 - h 26 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6070,7 +7138,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6082,6 +7150,7 @@ graph LabelGraphics [ text " + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -6093,10 +7162,10 @@ graph node [ - id 18 + id 12 graphics [ - w 103.4 + w 112.2 h 26 type "rectangle" fill "#FFFFFF" @@ -6105,7 +7174,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6128,10 +7197,10 @@ graph node [ - id 19 + id 13 graphics [ - w 103.4 + w 85.80000000000001 h 26 type "rectangle" fill "#FFFFFF" @@ -6140,206 +7209,100 @@ graph ] LabelGraphics [ - text "New Objects" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 fontName "Monospace" autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 13 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eTypeParameters reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 11 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 12 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 13 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 13 - target 12 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "eSuperPackage reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] edge [ source 11 - target 1 + target 6 graphics [ fill "#000000" @@ -6347,7 +7310,7 @@ graph ] LabelGraphics [ - text "abstract attribute EClass" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6357,16 +7320,17 @@ graph ] edge [ - source 11 - target 2 + source 5 + target 6 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "interface attribute EClass" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6376,16 +7340,17 @@ graph ] edge [ - source 11 - target 8 + source 5 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6395,16 +7360,17 @@ graph ] edge [ - source 15 - target 6 + source 5 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6414,16 +7380,17 @@ graph ] edge [ - source 0 - target 10 + source 5 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6433,16 +7400,17 @@ graph ] edge [ - source 13 - target 8 + source 5 + target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6452,16 +7420,17 @@ graph ] edge [ - source 11 - target 6 + source 6 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6471,8 +7440,8 @@ graph ] edge [ - source 0 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -6480,7 +7449,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6490,8 +7459,8 @@ graph ] edge [ - source 13 - target 7 + source 7 + target 5 graphics [ fill "#000000" @@ -6499,7 +7468,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6509,8 +7478,8 @@ graph ] edge [ - source 12 - target 7 + source 8 + target 5 graphics [ fill "#000000" @@ -6518,7 +7487,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6528,8 +7497,8 @@ graph ] edge [ - source 0 - target 8 + source 9 + target 5 graphics [ fill "#000000" @@ -6537,7 +7506,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -6545,162 +7514,35 @@ graph position "thead" ] ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 254.10000000000002 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6708,7 +7550,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6720,6 +7562,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6731,11 +7574,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6743,7 +7586,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6755,6 +7598,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6766,11 +7610,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6778,7 +7622,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6790,6 +7634,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -6801,10 +7646,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -6813,7 +7658,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6836,10 +7681,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -6848,7 +7693,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6871,11 +7716,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6883,7 +7728,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6895,6 +7740,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -6906,11 +7752,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6918,7 +7764,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -6930,6 +7776,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6941,11 +7789,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -6965,12 +7813,8 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -6982,11 +7826,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7006,12 +7850,8 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -7023,11 +7863,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7047,12 +7887,7 @@ graph LabelGraphics [ text " - EModelElement class - ENamedElement class - EOperation class - ETypedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7064,11 +7899,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 68 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -7088,9 +7923,7 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7102,10 +7935,10 @@ graph node [ - id 15 + id 11 graphics [ - w 238.70000000000002 + w 161.70000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -7126,7 +7959,7 @@ graph LabelGraphics [ text " - EStringToStringMapEntry class + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -7138,7 +7971,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -7173,7 +8006,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -7208,7 +8041,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -7243,7 +8076,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -7277,75 +8110,16 @@ graph ] edge [ - source 14 - target 15 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "details reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 11 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperTypes reference EClass" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 13 + source 9 + target 6 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eOperations reference EClass" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7355,8 +8129,8 @@ graph ] edge [ - source 11 - target 11 + source 10 + target 7 graphics [ fill "#000000" @@ -7364,7 +8138,7 @@ graph ] LabelGraphics [ - text "eAllSuperTypes reference EClass" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7375,46 +8149,7 @@ graph edge [ source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 14 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "eAnnotations reference EModelElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 11 + target 8 graphics [ fill "#000000" @@ -7422,7 +8157,7 @@ graph ] LabelGraphics [ - text "eContainingClass reference EOperation" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7432,8 +8167,8 @@ graph ] edge [ - source 0 - target 11 + source 5 + target 6 graphics [ fill "#000000" @@ -7442,7 +8177,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7452,8 +8187,8 @@ graph ] edge [ - source 0 - target 12 + source 5 + target 7 graphics [ fill "#000000" @@ -7462,26 +8197,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7491,16 +8207,17 @@ graph ] edge [ - source 11 + source 5 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7510,16 +8227,17 @@ graph ] edge [ - source 11 + source 6 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7529,73 +8247,17 @@ graph ] edge [ - source 0 + source 7 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 9 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7605,16 +8267,17 @@ graph ] edge [ - source 12 - target 8 + source 8 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7624,8 +8287,8 @@ graph ] edge [ - source 0 - target 8 + source 6 + target 5 graphics [ fill "#000000" @@ -7633,7 +8296,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7643,8 +8306,8 @@ graph ] edge [ - source 13 - target 1 + source 7 + target 5 graphics [ fill "#000000" @@ -7652,7 +8315,7 @@ graph ] LabelGraphics [ - text "unique attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -7662,8 +8325,8 @@ graph ] edge [ - source 13 - target 4 + source 8 + target 5 graphics [ fill "#000000" @@ -7671,7 +8334,7 @@ graph ] LabelGraphics [ - text "upperBound attribute ETypedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 bfe18c4e..5df81bb3 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png 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 45634c72..b4259573 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,10 +1,12 @@ - - -
- - - - - - + + + + + + + + + + + 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 a44b2785..2dd09497 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 @@ -5,8 +5,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -14,7 +14,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -26,12 +26,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -46,8 +41,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -55,7 +50,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -67,6 +62,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -81,8 +77,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -90,7 +86,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -102,6 +98,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -116,7 +113,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -125,7 +122,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -151,7 +148,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -160,7 +157,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -186,8 +183,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -195,7 +192,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -207,6 +204,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -221,8 +219,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -230,7 +228,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -242,6 +240,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -256,8 +256,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -265,7 +265,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -277,6 +277,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -291,8 +293,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -300,7 +302,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -312,6 +314,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -326,8 +330,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -335,7 +339,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -347,6 +351,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -361,8 +366,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -370,7 +375,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -382,6 +387,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -396,8 +402,8 @@ graph id 11 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -417,13 +423,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -437,173 +437,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -637,7 +470,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -672,7 +505,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -707,7 +540,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -741,8 +574,8 @@ graph ] edge [ - source 11 - target 0 + source 9 + target 7 graphics [ fill "#000000" @@ -750,7 +583,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -760,8 +593,8 @@ graph ] edge [ - source 12 - target 0 + source 10 + target 7 graphics [ fill "#000000" @@ -769,7 +602,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -779,8 +612,8 @@ graph ] edge [ - source 14 - target 0 + source 11 + target 6 graphics [ fill "#000000" @@ -788,7 +621,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -798,8 +631,8 @@ graph ] edge [ - source 15 - target 13 + source 9 + target 8 graphics [ fill "#000000" @@ -807,7 +640,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -817,17 +650,16 @@ graph ] edge [ - source 0 - target 11 + source 11 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -837,17 +669,16 @@ graph ] edge [ - source 0 - target 12 + source 10 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -857,8 +688,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 6 graphics [ fill "#000000" @@ -867,7 +698,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -877,8 +708,8 @@ graph ] edge [ - source 13 - target 15 + source 5 + target 7 graphics [ fill "#000000" @@ -887,7 +718,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -897,8 +728,8 @@ graph ] edge [ - source 0 - target 13 + source 5 + target 8 graphics [ fill "#000000" @@ -907,26 +738,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -936,8 +748,8 @@ graph ] edge [ - source 12 - target 8 + source 8 + target 9 graphics [ fill "#000000" @@ -945,7 +757,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -955,8 +767,8 @@ graph ] edge [ - source 11 - target 6 + source 8 + target 11 graphics [ fill "#000000" @@ -964,7 +776,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -974,7 +786,7 @@ graph ] edge [ - source 11 + source 8 target 10 graphics [ @@ -983,7 +795,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -993,16 +805,17 @@ graph ] edge [ - source 12 - target 8 + source 7 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1012,16 +825,17 @@ graph ] edge [ - source 0 + source 7 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1031,16 +845,17 @@ graph ] edge [ - source 12 - target 10 + source 6 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1050,8 +865,8 @@ graph ] edge [ - source 11 - target 10 + source 6 + target 5 graphics [ fill "#000000" @@ -1059,7 +874,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1069,8 +884,8 @@ graph ] edge [ - source 13 - target 6 + source 7 + target 5 graphics [ fill "#000000" @@ -1078,7 +893,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1088,8 +903,8 @@ graph ] edge [ - source 14 - target 10 + source 8 + target 5 graphics [ fill "#000000" @@ -1097,7 +912,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1105,92 +920,267 @@ graph position "thead" ] ] - edge - [ - source 0 - target 9 - graphics +] +graph +[ + node [ - fill "#000000" - targetArrow "standard" + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 0 - target 8 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] - edge - [ - source 13 - target 6 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 7 graphics [ - w 254.10000000000002 - h 110 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1198,7 +1188,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1210,12 +1200,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + InformationLink class " fontSize 14 fontName "Consolas" @@ -1227,11 +1212,11 @@ graph node [ - id 1 + id 8 graphics [ - w 41.800000000000004 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1239,7 +1224,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1251,6 +1236,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -1262,11 +1248,11 @@ graph node [ - id 2 + id 9 graphics [ - w 50.6 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1274,7 +1260,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1286,6 +1272,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1294,49 +1282,6308 @@ graph borderDistance 6 ] ] - - node + + node + [ + id 10 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + InformationLink class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics [ - id 3 - graphics - [ - w 24.200000000000003 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "-1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 4 + id 0 graphics [ - w 15.400000000000002 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1344,7 +7591,7 @@ graph ] LabelGraphics [ - text "0" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1356,6 +7603,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1367,11 +7615,11 @@ graph node [ - id 5 + id 1 graphics [ - w 15.400000000000002 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1379,7 +7627,7 @@ graph ] LabelGraphics [ - text "1" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1391,6 +7639,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1402,11 +7651,11 @@ graph node [ - id 6 + id 2 graphics [ - w 33.0 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1414,7 +7663,7 @@ graph ] LabelGraphics [ - text ""A"" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1426,6 +7675,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1437,10 +7687,10 @@ graph node [ - id 7 + id 3 graphics [ - w 33.0 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -1449,7 +7699,7 @@ graph ] LabelGraphics [ - text ""B"" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1472,10 +7722,10 @@ graph node [ - id 8 + id 4 graphics [ - w 94.60000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -1484,7 +7734,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1507,11 +7757,11 @@ graph node [ - id 9 + id 5 graphics [ - w 68.2 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1519,7 +7769,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1531,6 +7781,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -1542,11 +7793,11 @@ graph node [ - id 10 + id 6 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1554,7 +7805,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1566,6 +7817,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1577,11 +7830,11 @@ graph node [ - id 11 + id 7 graphics [ - w 269.5 - h 110 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1601,12 +7854,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1618,11 +7867,11 @@ graph node [ - id 12 + id 8 graphics [ - w 269.5 - h 68 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1642,9 +7891,8 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1656,11 +7904,11 @@ graph node [ - id 13 + id 9 graphics [ - w 269.5 - h 110 + w 161.70000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1680,12 +7928,7 @@ graph LabelGraphics [ text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FAMTerminator class " fontSize 14 fontName "Consolas" @@ -1697,11 +7940,11 @@ graph node [ - id 14 + id 10 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1721,12 +7964,8 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1738,11 +7977,11 @@ graph node [ - id 15 + id 11 graphics [ - w 269.5 - h 68 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1762,9 +8001,7 @@ graph LabelGraphics [ text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -1776,7 +8013,7 @@ graph node [ - id 16 + id 12 graphics [ w 112.2 @@ -1811,7 +8048,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -1846,7 +8083,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -1881,7 +8118,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -1915,27 +8152,8 @@ graph ] edge [ - source 12 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eModelElement reference EAnnotation" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 15 - target 0 + source 9 + target 6 graphics [ fill "#000000" @@ -1943,7 +8161,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "data reference FAMTerminator" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1954,45 +8172,7 @@ graph edge [ source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 14 - target 0 + target 8 graphics [ fill "#000000" @@ -2000,7 +8180,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2010,17 +8190,16 @@ graph ] edge [ - source 0 - target 12 + source 11 + target 10 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2030,8 +8209,8 @@ graph ] edge [ - source 0 - target 15 + source 5 + target 6 graphics [ fill "#000000" @@ -2040,7 +8219,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2050,8 +8229,8 @@ graph ] edge [ - source 0 - target 11 + source 5 + target 7 graphics [ fill "#000000" @@ -2060,7 +8239,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2070,8 +8249,8 @@ graph ] edge [ - source 0 - target 13 + source 5 + target 8 graphics [ fill "#000000" @@ -2080,7 +8259,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2090,8 +8269,8 @@ graph ] edge [ - source 0 - target 14 + source 5 + target 10 graphics [ fill "#000000" @@ -2100,26 +8279,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source attribute EAnnotation" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2129,8 +8289,8 @@ graph ] edge [ - source 11 - target 8 + source 10 + target 11 graphics [ fill "#000000" @@ -2138,7 +8298,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2148,16 +8308,17 @@ graph ] edge [ - source 14 - target 10 + source 8 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2167,73 +8328,17 @@ graph ] edge [ - source 11 + source 6 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 2 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "serializable attribute EDataType" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 10 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 11 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "name attribute ENamedElement" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2243,8 +8348,8 @@ graph ] edge [ - source 13 - target 9 + source 6 + target 5 graphics [ fill "#000000" @@ -2252,7 +8357,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2262,8 +8367,8 @@ graph ] edge [ - source 14 - target 8 + source 7 + target 5 graphics [ fill "#000000" @@ -2271,7 +8376,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2281,8 +8386,8 @@ graph ] edge [ - source 0 - target 9 + source 8 + target 5 graphics [ fill "#000000" @@ -2290,7 +8395,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2300,8 +8405,8 @@ graph ] edge [ - source 0 - target 8 + source 10 + target 5 graphics [ fill "#000000" @@ -2309,7 +8414,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 a47da297..5a2af8ba 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png 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 8bff1dc6..4ca54850 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,8 +1,11 @@ - - - - - - - + + + + + + + + + + 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 e5647b66..3a9035a7 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 @@ -5,8 +5,8 @@ graph id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -14,7 +14,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -26,12 +26,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -46,8 +41,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -55,7 +50,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -67,6 +62,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -81,8 +77,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -90,7 +86,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -102,6 +98,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -116,7 +113,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -125,7 +122,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -151,7 +148,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -160,7 +157,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -186,8 +183,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -195,7 +192,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -207,6 +204,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -221,8 +219,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -230,7 +228,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -242,6 +240,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -256,8 +256,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -265,7 +265,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -277,6 +277,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -291,8 +293,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -300,7 +302,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -312,6 +314,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -326,8 +330,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -335,7 +339,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -347,6 +351,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -361,8 +366,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -370,7 +375,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -382,6 +387,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -396,8 +402,8 @@ graph id 11 graphics [ - w 269.5 - h 124 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -417,13 +423,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -437,173 +437,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EModelElement class - ENamedElement class - EPackage class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - EPackage class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 124 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EEnum class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -637,7 +470,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -672,7 +505,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -707,7 +540,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -741,27 +574,8 @@ graph ] edge [ - source 11 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "ePackage reference EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 0 + source 9 + target 7 graphics [ fill "#000000" @@ -769,7 +583,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -779,8 +593,8 @@ graph ] edge [ - source 14 - target 0 + source 10 + target 7 graphics [ fill "#000000" @@ -788,7 +602,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -798,8 +612,8 @@ graph ] edge [ - source 15 - target 13 + source 11 + target 7 graphics [ fill "#000000" @@ -807,7 +621,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -817,17 +631,16 @@ graph ] edge [ - source 0 - target 11 + source 9 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -837,17 +650,16 @@ graph ] edge [ - source 0 - target 12 + source 10 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -857,17 +669,16 @@ graph ] edge [ - source 0 - target 14 + source 11 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -877,8 +688,8 @@ graph ] edge [ - source 13 - target 15 + source 5 + target 6 graphics [ fill "#000000" @@ -887,7 +698,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -897,8 +708,8 @@ graph ] edge [ - source 0 - target 13 + source 5 + target 7 graphics [ fill "#000000" @@ -907,26 +718,7 @@ graph ] LabelGraphics [ - text "eSubpackages reference EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 0 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "eSuperPackage reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -936,16 +728,17 @@ graph ] edge [ - source 12 + source 5 target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -955,8 +748,8 @@ graph ] edge [ - source 11 - target 6 + source 8 + target 9 graphics [ fill "#000000" @@ -964,7 +757,7 @@ graph ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -974,7 +767,7 @@ graph ] edge [ - source 11 + source 8 target 10 graphics [ @@ -983,26 +776,7 @@ graph ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 12 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "instanceTypeName attribute EClassifier" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1012,8 +786,8 @@ graph ] edge [ - source 11 - target 1 + source 8 + target 11 graphics [ fill "#000000" @@ -1021,7 +795,7 @@ graph ] LabelGraphics [ - text "serializable attribute EDataType" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1031,16 +805,17 @@ graph ] edge [ - source 0 - target 10 + source 7 + target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1050,16 +825,17 @@ graph ] edge [ - source 12 + source 7 target 10 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1069,16 +845,17 @@ graph ] edge [ - source 11 - target 10 + source 7 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1088,8 +865,8 @@ graph ] edge [ - source 13 - target 6 + source 6 + target 5 graphics [ fill "#000000" @@ -1097,7 +874,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1107,8 +884,8 @@ graph ] edge [ - source 14 - target 10 + source 7 + target 5 graphics [ fill "#000000" @@ -1116,7 +893,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1126,8 +903,8 @@ graph ] edge [ - source 0 - target 9 + source 8 + target 5 graphics [ fill "#000000" @@ -1135,7 +912,7 @@ graph ] LabelGraphics [ - text "nsURI attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1143,73 +920,16 @@ graph position "thead" ] ] - edge - [ - source 13 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsURI attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 8 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 13 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "nsPrefix attribute EPackage" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node +] +graph +[ + node [ id 0 graphics [ - w 254.10000000000002 - h 110 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1217,7 +937,7 @@ graph ] LabelGraphics [ - text "o 1" + text "Root literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1229,12 +949,7 @@ graph LabelGraphics [ text " - EModelElement class DefinedPart - ENamedElement class DefinedPart - EPackage class DefinedPart - EModelElement class - ENamedElement class - EPackage class + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1249,8 +964,8 @@ graph id 1 graphics [ - w 41.800000000000004 - h 26 + w 297.0 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1258,7 +973,7 @@ graph ] LabelGraphics [ - text "true" + text "Intermediate literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1270,6 +985,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1284,8 +1000,8 @@ graph id 2 graphics [ - w 50.6 - h 26 + w 226.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1293,7 +1009,7 @@ graph ] LabelGraphics [ - text "false" + text "Leaf literal FunctionType" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1305,6 +1021,7 @@ graph LabelGraphics [ text " + FunctionType enum " fontSize 14 fontName "Consolas" @@ -1319,7 +1036,7 @@ graph id 3 graphics [ - w 24.200000000000003 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -1328,7 +1045,7 @@ graph ] LabelGraphics [ - text "-1" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1354,7 +1071,7 @@ graph id 4 graphics [ - w 15.400000000000002 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -1363,7 +1080,7 @@ graph ] LabelGraphics [ - text "0" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1389,8 +1106,8 @@ graph id 5 graphics [ - w 15.400000000000002 - h 26 + w 207.9 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1398,7 +1115,7 @@ graph ] LabelGraphics [ - text "1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1410,6 +1127,7 @@ graph LabelGraphics [ text " + FunctionalInterface class " fontSize 14 fontName "Consolas" @@ -1424,8 +1142,8 @@ graph id 6 graphics [ - w 33.0 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1433,7 +1151,7 @@ graph ] LabelGraphics [ - text ""A"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1445,6 +1163,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1459,8 +1179,8 @@ graph id 7 graphics [ - w 33.0 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1468,7 +1188,7 @@ graph ] LabelGraphics [ - text ""B"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1480,6 +1200,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -1494,8 +1215,8 @@ graph id 8 graphics [ - w 94.60000000000001 - h 26 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1503,7 +1224,7 @@ graph ] LabelGraphics [ - text ""nsPrefix"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1515,6 +1236,7 @@ graph LabelGraphics [ text " + InformationLink class " fontSize 14 fontName "Consolas" @@ -1529,8 +1251,8 @@ graph id 9 graphics [ - w 68.2 - h 26 + w 177.10000000000002 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1538,7 +1260,7 @@ graph ] LabelGraphics [ - text ""nsUri"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1550,6 +1272,8 @@ graph LabelGraphics [ text " + FunctionalInput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1564,8 +1288,8 @@ graph id 10 graphics [ - w 121.00000000000001 - h 26 + w 184.8 + h 54 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1573,7 +1297,7 @@ graph ] LabelGraphics [ - text ""packageName"" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1585,6 +1309,8 @@ graph LabelGraphics [ text " + FunctionalOutput class + FunctionalData class " fontSize 14 fontName "Consolas" @@ -1599,8 +1325,8 @@ graph id 11 graphics [ - w 269.5 - h 110 + w 177.10000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1620,12 +1346,7 @@ graph LabelGraphics [ text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart + InformationLink class " fontSize 14 fontName "Consolas" @@ -1639,164 +1360,6 @@ graph [ id 12 graphics - [ - w 269.5 - h 68 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 13 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClass class - EClassifier class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 14 - graphics - [ - w 269.5 - h 110 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EClassifier class - EDataType class - EModelElement class - ENamedElement class - EModelElement class UndefinedPart - ENamedElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 15 - graphics - [ - w 269.5 - h 68 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - EAnnotation class - EModelElement class - EModelElement class UndefinedPart - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 16 - graphics [ w 112.2 h 26 @@ -1830,7 +1393,7 @@ graph node [ - id 17 + id 13 graphics [ w 85.80000000000001 @@ -1865,7 +1428,7 @@ graph node [ - id 18 + id 14 graphics [ w 103.4 @@ -1900,7 +1463,7 @@ graph node [ - id 19 + id 15 graphics [ w 103.4 @@ -1934,8 +1497,8 @@ graph ] edge [ - source 12 - target 0 + source 7 + target 6 graphics [ fill "#000000" @@ -1943,7 +1506,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1953,8 +1516,8 @@ graph ] edge [ - source 15 - target 0 + source 8 + target 6 graphics [ fill "#000000" @@ -1962,7 +1525,7 @@ graph ] LabelGraphics [ - text "eModelElement reference EAnnotation" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1973,7 +1536,7 @@ graph edge [ source 11 - target 0 + target 10 graphics [ fill "#000000" @@ -1981,7 +1544,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "from reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -1991,8 +1554,8 @@ graph ] edge [ - source 13 - target 0 + source 7 + target 9 graphics [ fill "#000000" @@ -2000,7 +1563,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2010,8 +1573,8 @@ graph ] edge [ - source 14 - target 0 + source 8 + target 9 graphics [ fill "#000000" @@ -2019,7 +1582,7 @@ graph ] LabelGraphics [ - text "ePackage reference EClassifier" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2029,17 +1592,16 @@ graph ] edge [ - source 0 - target 12 + source 11 + target 9 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "to reference InformationLink" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2049,8 +1611,8 @@ graph ] edge [ - source 0 - target 15 + source 5 + target 6 graphics [ fill "#000000" @@ -2059,7 +1621,7 @@ graph ] LabelGraphics [ - text "eAnnotations reference EModelElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2069,8 +1631,8 @@ graph ] edge [ - source 0 - target 11 + source 5 + target 9 graphics [ fill "#000000" @@ -2079,7 +1641,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2089,8 +1651,8 @@ graph ] edge [ - source 0 - target 13 + source 5 + target 10 graphics [ fill "#000000" @@ -2099,7 +1661,7 @@ graph ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2109,17 +1671,16 @@ graph ] edge [ - source 0 - target 14 + source 9 + target 7 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "eClassifiers reference EPackage" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2129,8 +1690,8 @@ graph ] edge [ - source 12 - target 7 + source 9 + target 8 graphics [ fill "#000000" @@ -2138,7 +1699,7 @@ graph ] LabelGraphics [ - text "source attribute EAnnotation" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2148,8 +1709,8 @@ graph ] edge [ - source 13 - target 2 + source 9 + target 11 graphics [ fill "#000000" @@ -2157,7 +1718,7 @@ graph ] LabelGraphics [ - text "abstract attribute EClass" + text "IncomingLinks reference FunctionalInput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2167,16 +1728,17 @@ graph ] edge [ - source 11 - target 8 + source 6 + target 7 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2186,16 +1748,17 @@ graph ] edge [ - source 14 - target 10 + source 6 + target 8 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceClassName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2205,16 +1768,17 @@ graph ] edge [ - source 11 - target 9 + source 10 + target 11 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "instanceTypeName attribute EClassifier" + text "outgoingLinks reference FunctionalOutput" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2224,8 +1788,8 @@ graph ] edge [ - source 11 - target 2 + source 6 + target 5 graphics [ fill "#000000" @@ -2233,7 +1797,7 @@ graph ] LabelGraphics [ - text "serializable attribute EDataType" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2243,8 +1807,8 @@ graph ] edge [ - source 0 - target 10 + source 9 + target 5 graphics [ fill "#000000" @@ -2252,7 +1816,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2262,8 +1826,8 @@ graph ] edge [ - source 11 - target 8 + source 10 + target 5 graphics [ fill "#000000" @@ -2271,7 +1835,7 @@ graph ] LabelGraphics [ - text "name attribute ENamedElement" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2279,18 +1843,6515 @@ graph position "thead" ] ] - edge - [ - source 13 - target 9 - graphics - [ - fill "#000000" +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + InformationLink class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + InformationLink class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "parent reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "subElements reference Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 2 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 269.5 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalArchitectureModel class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 192.50000000000003 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalElement class + Function class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + InformationLink class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "model reference FunctionalElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "rootElements reference FunctionalArchitectureModel" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "from reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "to reference InformationLink" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "element reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "IncomingLinks reference FunctionalInput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingLinks reference FunctionalOutput" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 0 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "type attribute Function" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "terminator reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Root literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 297.0 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Intermediate literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 226.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "Leaf literal FunctionType" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionType enum + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 207.9 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInterface class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 184.8 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalOutput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 161.70000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FAMTerminator class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 177.10000000000002 + h 54 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + FunctionalInput class + FunctionalData class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FAMTerminator" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2300,16 +8361,57 @@ graph ] edge [ - source 14 + source 5 target 8 graphics [ fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "data reference FunctionalInterface" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "name attribute ENamedElement" + text "data reference FunctionalInterface" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2319,16 +8421,17 @@ graph ] edge [ - source 0 + source 6 target 9 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "nsURI attribute EPackage" + text "terminator reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -2338,8 +8441,84 @@ graph ] edge [ - source 0 - target 8 + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "interface reference FunctionalData" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 graphics [ fill "#000000" @@ -2347,7 +8526,7 @@ graph ] LabelGraphics [ - text "nsPrefix attribute EPackage" + text "interface reference FunctionalData" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 7b6e8da5..3c09036a 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png 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 8bff1dc6..21ac69a6 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,8 +1,10 @@ - - - - - - - + + + + + + + + + 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 6422beb9..f0a5df58 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 @@ -1,48 +1,20 @@ -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;441;2068;2486;3217702419;62;29;140;4;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;463;2860;2654;3199911479;74;37;138;5;0;3 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;499;2201;2467;3339884626;68;36;141;4;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;452;2821;2223;3526490298;59;27;122;5;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;11;1529;1717;4396467206;87;94;100;54;17;4;0;3 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;15;1411;1457;4222415279;54;68;77;36;10;4;0;5 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;9;1335;1288;2769089958;64;74;31;12;1;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;4;1180;1189;2923747093;50;58;26;10;1;0;1 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;839;2519;2455;3266543842;68;33;193;5;0;3 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;11;2019;1948;3337962573;91;104;53;16;2;0;3 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;1719;3345;2829;7904668959;235;261;107;497;53;0;6 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;13;1736;1740;2852471270;62;73;37;19;1;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;529;2502;2857;3681787432;68;30;125;4;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;788;2572;2188;3322713636;67;30;148;5;0;4 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;443;2849;2573;4906642931;151;171;75;124;7;0;8 -Task;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 -2;1;ModelResultImpl;19;4315;9042;20459725100;239;247;252;257;261;217;19;6;0;11 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;513;2237;2193;6152392500;162;177;77;150;6;0;5 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;11;1602;1604;2992330200;66;77;38;16;1;0;3 -Task;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 -2;1;ModelResultImpl;128;4855;10109;16068923000;382;391;398;403;409;349;37;8;0;16 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -2;1;ModelResultImpl;18;3632;9743;7955260600;299;307;313;261;17;7;0;8 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -2;1;ModelResultImpl;471;5606;10554;10190416000;482;497;509;400;189;16;0;21 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -2;1;ModelResultImpl;28;4850;10801;9664839300;622;635;651;560;23;18;0;20 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;6;1884;1462;3186743800;40;48;20;16;1;0;1 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -2;1;ModelResultImpl;9;4021;9222;7668037900;233;239;243;201;10;8;0;6 +Task;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 +1;1;ModelResultImpl;2;1459;1800;9941267600;254;383;414;441;477;249;6;14;0;5 +Task;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 +1;1;ModelResultImpl;0;1095;1138;10430069000;47;67;101;104;168;77;5;3;0;3 +Task;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 +1;1;ModelResultImpl;1;971;1320;9287027600;59;82;103;298;350;265;7;2;0;3 +Task;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 +1;1;ModelResultImpl;1;945;1239;9183595100;65;83;102;132;150;81;6;2;0;2 +Task;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 +1;1;ModelResultImpl;1;934;1758;9668065700;313;387;426;505;625;353;7;8;0;2 +Task;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 +1;1;ModelResultImpl;1;952;1268;9015161500;79;135;155;174;233;121;6;3;0;2 +Task;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 +1;1;ModelResultImpl;1;966;1534;9401550800;104;179;199;336;375;186;7;5;0;3 +Task;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 +1;1;ModelResultImpl;1;1027;1635;8949130900;249;277;316;417;444;258;5;5;0;4 +Task;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 +1;1;ModelResultImpl;1;928;1173;8877697600;49;109;128;149;167;83;5;2;0;3 +Task;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 +1;1;ModelResultImpl;2;1070;1291;9164916500;97;114;167;249;276;120;8;3;0;3 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 5caab94d..187ae1ac 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 @@ -1,55 +1,17 @@ -Error occured (IllegalArgumentException): Class FunctionalArchitectureModel is not translated to logic! - hu.bme.mit.inf.dslreasoner.ecore2logic.EClassMapper_AllElementAsObject.TypeofEClass(EClassMapper_AllElementAsObject.java:63) - hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.TypeofEClass(Ecore2Logic.java:96) - hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation.transform(InstanceModel2PartialInterpretation.java:99) - hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic.transform(InstanceModel2Logic.java:19) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:192) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalArgumentException): Class FunctionalArchitectureModel is not translated to logic! - hu.bme.mit.inf.dslreasoner.ecore2logic.EClassMapper_AllElementAsObject.TypeofEClass(EClassMapper_AllElementAsObject.java:63) - hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.TypeofEClass(Ecore2Logic.java:96) - hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2PartialInterpretation.transform(InstanceModel2PartialInterpretation.java:99) - hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic.transform(InstanceModel2Logic.java:19) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:192) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204) - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282) - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1) - org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66) - org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1) - org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) - org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) - org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.(FileSystemImpl.java:55) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59) - hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) - hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) - org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204) - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282) - org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1) - org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66) - org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1) - org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152) - org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113) - org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.(FileSystemImpl.java:55) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74) - ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59) - hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75) - hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359) +Error occured (NullPointerException): + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108) + org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41) + com.google.common.collect.Iterators$6.computeNext(Iterators.java:617) + com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145) + com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140) + com.google.common.collect.Iterators.addAll(Iterators.java:366) + com.google.common.collect.Iterables.addAll(Iterables.java:332) + com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383) + org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213) + hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54) + hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) 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 f90ed439..5ac9e1dc 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 @@ -104,27 +104,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -152,21 +152,21 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or @@ -194,17 +194,17 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or @@ -232,17 +232,17 @@ private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or @@ -270,18 +270,18 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); @@ -310,25 +310,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -356,25 +356,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -403,9 +403,9 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); @@ -413,9 +413,9 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); @@ -445,20 +445,20 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -486,21 +486,21 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -528,25 +528,25 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -574,25 +574,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -620,19 +620,19 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -681,17 +681,17 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -740,19 +740,19 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -987,1963 +987,1406 @@ private pattern mayInRelationregions_reference_CompositeElement( ////////// // 1.3 Relation Definition Indexers ////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or - - { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or - - { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; } - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); - find mustInstanceOfTransition_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); } - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } -pattern createObject_Exit_class_by_vertices_reference_Region( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_r1) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } -pattern createObject_Exit_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_r1) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } -pattern createObject_FinalState_class_by_vertices_reference_Region( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_r) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); } -pattern createObject_FinalState_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_r) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_r) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; } -pattern createObject_Transition_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; } -pattern createObject_Region_class_by_regions_reference_CompositeElement( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); - find mustInstanceOfCompositeElement_class(problem,interpretation,container); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); } -pattern createObject_Region_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; } -pattern createObject_Choice_class_by_vertices_reference_Region( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_Choice_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_Synchronization_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Statechart_class_UndefinedPart( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Entry_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Entry_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); } -pattern createObject_State_class_by_vertices_reference_Region( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; } -pattern createObject_State_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_region) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); - PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfVertex_class(problem,interpretation,from); - find mustInstanceOfTransition_class(problem,interpretation,to); - find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); - neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ + find interpretation(problem,interpretation); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); } - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "FileSystem class". - */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); - find directInstanceOf(problem,interpretation,element,type); +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -/** - * An element may be an instance of type "FileSystem class". - */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } -/** - * An element must be an instance of type "FSObject class". - */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); -} - -/** - * An element may be an instance of type "FSObject class". - */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Dir class". - */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); -} - -/** - * An element may be an instance of type "Dir class". - */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } -/** - * An element must be an instance of type "File class". - */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -/** - * An element may be an instance of type "File class". - */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); -} - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ -private pattern mustInRelationlive_reference_FileSystem( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } -/** - * Matcher for detecting tuples t where <>live reference FileSystem(source,target) - */ -private pattern mayInRelationlive_reference_FileSystem( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); -} or { - find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_v) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or - - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or - - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); } - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; } -pattern createObject_Model_class_UndefinedPart( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_v) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; } -pattern createObject_Dir_class_by_root_reference_FileSystem( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; } -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; } -pattern createObject_Dir_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_parent, var_child) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); } -pattern createObject_File_class_by_otherFSObjects_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -pattern createObject_File_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_s, var_v) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -pattern createObject_FileSystem_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_s, var_v) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); -} -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); } -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( + problem:LogicProblem, interpretation:PartialInterpretation, + var_composite) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_live_reference_FileSystem( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_composite) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; } - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; -} - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); } - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); -} - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); -} - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "FileSystem class". - */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; } - -/** - * An element may be an instance of type "FileSystem class". - */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +}or{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } -/** - * An element must be an instance of type "FSObject class". - */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; } -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); } - -/** - * An element may be an instance of type "FSObject class". - */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Dir class". - */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } -/** - * An element may be an instance of type "Dir class". - */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } -/** - * An element must be an instance of type "File class". - */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); +////////// +// 1.4 Containment Indexer +////////// +private pattern mustContains2(source: DefinedElement, target: DefinedElement) { + find mustContains4(_,_,source,target); } -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + +private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target: DefinedElement) + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or + + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or + + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } + +private pattern mustTransitiveContains(source,target) { + find mustContains2+(source,target); } -/** - * An element may be an instance of type "File class". - */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +////////// +// 2. Invalidation Indexers +////////// +// 2.1 Invalidated by WF Queries +////////// +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); } -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); } -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); } - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); } -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { - find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ -private pattern mustInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where <>live reference FileSystem(source,target) - */ -private pattern mayInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); -} or { - find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) { - find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); -} - -////////// -// 1.3 Relation Definition Indexers -////////// - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or - - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or - - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); } -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// - ////////// // 3. Unfinishedness Indexers ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } @@ -2951,187 +2394,407 @@ pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicPro ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) { - find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Model_class_UndefinedPart( +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class_by_otherFSObjects_reference_Model( +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class( +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class_by_root_reference_FileSystem( +pattern createObject_Entry_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class( +pattern createObject_Transition_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( +pattern createObject_Region_class_by_regions_reference_CompositeElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FileSystem_class( +pattern createObject_Region_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -3139,58 +2802,126 @@ pattern createObject_FileSystem_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); } -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); } ////////// // 4.3 Relation refinement ////////// -pattern refineRelation_live_reference_FileSystem( +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); } import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" @@ -3298,27 +3029,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3346,9 +3077,9 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); @@ -3356,9 +3087,9 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); @@ -3388,16 +3119,16 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); @@ -3464,18 +3195,18 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); @@ -3504,25 +3235,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3550,25 +3281,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3598,8 +3329,8 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); @@ -3608,8 +3339,8 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); @@ -3638,21 +3369,21 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3682,8 +3413,8 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); @@ -3692,8 +3423,8 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); @@ -3722,25 +3453,25 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3768,25 +3499,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3815,18 +3546,18 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -3875,16 +3606,16 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -3934,18 +3665,18 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -5687,55 +5418,55 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustInstanceOfEntry_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); + find mustInstanceOfChoice_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); + find mustInstanceOfStatechart_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); + find mustInstanceOfVertex_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); + find mustInstanceOfPseudostate_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustInstanceOfTransition_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustInstanceOfRegularState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); + find mustInstanceOfRegion_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); + find mustInstanceOfSynchronization_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -5754,157 +5485,157 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Entry_class_by_vertices_reference_Region( +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class( +pattern createObject_State_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class_by_vertices_reference_Region( +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class( +pattern createObject_Transition_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_State_class_by_vertices_reference_Region( +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_State_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Statechart_class_UndefinedPart( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class( +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class_by_regions_reference_CompositeElement( +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); - find mustInstanceOfCompositeElement_class(problem,interpretation,container); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - find mayInstanceOfRegion_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -5936,59 +5667,59 @@ pattern createObject_FinalState_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class_by_vertices_reference_Region( +pattern createObject_Region_class_by_regions_reference_CompositeElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class( +pattern createObject_Region_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +pattern createObject_Entry_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class( +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -5996,31 +5727,14 @@ pattern createObject_Synchronization_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); -} -pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); } pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); @@ -6029,72 +5743,89 @@ pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInt neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); -} -pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); } pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); } -pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); } -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); } ////////// @@ -6223,27 +5954,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6271,21 +6002,21 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6313,17 +6044,17 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6351,16 +6082,16 @@ private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); @@ -6391,8 +6122,8 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -6400,8 +6131,8 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6429,25 +6160,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6475,25 +6206,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6523,9 +6254,9 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -6533,9 +6264,9 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6563,21 +6294,21 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6607,9 +6338,9 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -6617,9 +6348,9 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6647,25 +6378,25 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6693,25 +6424,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6739,19 +6470,19 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -6801,16 +6532,16 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -6860,18 +6591,18 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -8612,55 +8343,55 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustInstanceOfEntry_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); + find mustInstanceOfChoice_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); + find mustInstanceOfStatechart_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); + find mustInstanceOfVertex_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); + find mustInstanceOfPseudostate_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustInstanceOfTransition_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustInstanceOfRegularState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); + find mustInstanceOfRegion_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); + find mustInstanceOfSynchronization_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -8679,115 +8410,115 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_State_class_by_vertices_reference_Region( +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_State_class( +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class_by_vertices_reference_Region( +pattern createObject_State_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class( +pattern createObject_State_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class_by_vertices_reference_Region( +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class_by_vertices_reference_Region( +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -8803,61 +8534,59 @@ pattern createObject_Statechart_class_UndefinedPart( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class_by_vertices_reference_Region( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class( +pattern createObject_FinalState_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +pattern createObject_Entry_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class( +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -8889,31 +8618,33 @@ pattern createObject_Region_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class( +pattern createObject_Transition_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -8921,105 +8652,105 @@ pattern createObject_Synchronization_class( ////////// // 4.2 Type refinement ////////// +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); +} pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); -} -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); } pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } ////////// @@ -9148,27 +8879,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9196,21 +8927,21 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9238,17 +8969,17 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9314,19 +9045,19 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9354,25 +9085,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9400,25 +9131,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9446,21 +9177,21 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9488,21 +9219,21 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9530,21 +9261,21 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9572,25 +9303,25 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9618,25 +9349,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9664,19 +9395,19 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -9725,16 +9456,16 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -9784,18 +9515,18 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -11537,55 +11268,55 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustInstanceOfEntry_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); + find mustInstanceOfChoice_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); + find mustInstanceOfStatechart_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); + find mustInstanceOfVertex_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); + find mustInstanceOfPseudostate_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustInstanceOfTransition_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustInstanceOfRegularState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); + find mustInstanceOfRegion_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); + find mustInstanceOfSynchronization_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -11604,145 +11335,173 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Entry_class_by_vertices_reference_Region( +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class_by_vertices_reference_Region( +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class( +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +pattern createObject_Entry_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class( +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +pattern createObject_Region_class_by_regions_reference_CompositeElement( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class( +pattern createObject_Region_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class_by_vertices_reference_Region( +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -11758,31 +11517,31 @@ pattern createObject_Statechart_class_UndefinedPart( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class_by_regions_reference_CompositeElement( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); - find mustInstanceOfCompositeElement_class(problem,interpretation,container); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class( +pattern createObject_FinalState_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - find mayInstanceOfRegion_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -11814,137 +11573,109 @@ pattern createObject_State_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class_by_vertices_reference_Region( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Exit_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); } pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } -pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); } pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); -} -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); } ////////// @@ -12075,12 +11806,12 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -12088,12 +11819,12 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12121,21 +11852,21 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12201,17 +11932,17 @@ private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12239,19 +11970,19 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12281,11 +12012,11 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -12293,11 +12024,11 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12326,24 +12057,24 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12371,21 +12102,21 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12413,21 +12144,21 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12455,20 +12186,20 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); @@ -12499,11 +12230,11 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -12511,11 +12242,11 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12545,11 +12276,11 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { @@ -12557,11 +12288,11 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12589,19 +12320,19 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -12651,16 +12382,16 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -12710,8 +12441,8 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -12719,8 +12450,8 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -14462,55 +14193,55 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustInstanceOfEntry_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); + find mustInstanceOfChoice_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); + find mustInstanceOfStatechart_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); + find mustInstanceOfVertex_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); + find mustInstanceOfPseudostate_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustInstanceOfTransition_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustInstanceOfRegularState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); + find mustInstanceOfRegion_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); + find mustInstanceOfSynchronization_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -14529,6 +14260,34 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, @@ -14587,59 +14346,31 @@ pattern createObject_Synchronization_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_State_class_by_vertices_reference_Region( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_State_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Exit_class_by_vertices_reference_Region( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class( +pattern createObject_FinalState_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -14671,31 +14402,15 @@ pattern createObject_Choice_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class_by_vertices_reference_Region( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FinalState_class( +pattern createObject_Statechart_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -14755,15 +14470,31 @@ pattern createObject_Entry_class( find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Statechart_class_UndefinedPart( +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -14771,14 +14502,25 @@ pattern createObject_Statechart_class_UndefinedPart( ////////// // 4.2 Type refinement ////////// +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); +} pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); } pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); @@ -14786,36 +14528,22 @@ pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation: find mayInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); } -pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); -} -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); } pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); @@ -14823,31 +14551,30 @@ pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialIn find mayInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); } pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); } pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); @@ -14855,21 +14582,25 @@ pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInt find mayInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); } -pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); } ////////// @@ -14998,27 +14729,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15046,21 +14777,21 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15088,17 +14819,17 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15127,16 +14858,16 @@ private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretati find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewTransition_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15164,19 +14895,19 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15204,25 +14935,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15250,25 +14981,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15296,21 +15027,21 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15338,21 +15069,21 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15380,21 +15111,21 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15422,25 +15153,25 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15468,25 +15199,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15514,19 +15245,19 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); } or @@ -15634,18 +15365,18 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); @@ -17387,15 +17118,15 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustInstanceOfEntry_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); + find mustInstanceOfChoice_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -17403,39 +17134,39 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); + find mustInstanceOfStatechart_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); + find mustInstanceOfVertex_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); + find mustInstanceOfPseudostate_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); + find mustInstanceOfTransition_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustInstanceOfRegularState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustInstanceOfRegion_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustInstanceOfSynchronization_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); @@ -17454,241 +17185,241 @@ private pattern hasElementInContainment(problem:LogicProblem, interpretation:Par find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_State_class_by_vertices_reference_Region( +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_State_class( +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class_by_vertices_reference_Region( +pattern createObject_Entry_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FinalState_class( +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Synchronization_class( +pattern createObject_FinalState_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class_by_regions_reference_CompositeElement( +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); - find mustInstanceOfCompositeElement_class(problem,interpretation,container); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Region_class( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - find mayInstanceOfRegion_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class_by_vertices_reference_Region( +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Entry_class( +pattern createObject_Region_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class_by_vertices_reference_Region( +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Exit_class( +pattern createObject_Transition_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class_by_vertices_reference_Region( +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Choice_class( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +pattern createObject_State_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Transition_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Statechart_class_UndefinedPart( +pattern createObject_State_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -17696,105 +17427,105 @@ pattern createObject_Statechart_class_UndefinedPart( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } -pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfRegion_class(problem,interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); } -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); } -pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); -} -pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } -pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); } ////////// @@ -17923,27 +17654,27 @@ private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretat { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewPseudostate_class(problem, interpretation); neg find isPrimitive(element); } or @@ -17972,9 +17703,9 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); @@ -17982,9 +17713,9 @@ private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:P find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewVertex_class(problem, interpretation); neg find isPrimitive(element); @@ -18014,16 +17745,16 @@ private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:P find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewRegion_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18089,19 +17820,19 @@ private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretati { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18129,25 +17860,25 @@ private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewEntry_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18175,25 +17906,25 @@ private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpr { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewSynchronization_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18221,20 +17952,20 @@ private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:Pa { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewState_class(problem, interpretation); neg find isPrimitive(element); @@ -18263,20 +17994,20 @@ private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpreta { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewRegularState_class(problem, interpretation); neg find isPrimitive(element); @@ -18305,21 +18036,21 @@ private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interp { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18348,24 +18079,24 @@ private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:P find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find scopeDisallowsNewChoice_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18393,25 +18124,25 @@ private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:Par { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); neg find scopeDisallowsNewExit_class(problem, interpretation); neg find isPrimitive(element); } or @@ -18440,8 +18171,8 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); @@ -18449,8 +18180,8 @@ private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretati find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfPseudostate_class(problem,interpretation,element); neg find scopeDisallowsNewFinalState_class(problem, interpretation); neg find isPrimitive(element); @@ -18500,17 +18231,17 @@ private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfRegion_class(problem,interpretation,element); neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -18559,19 +18290,19 @@ private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicP { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find mustInstanceOfTransition_class(problem,interpretation,element); neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or @@ -20273,1233 +20004,2736 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_ { find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, - var_s, var_v1, var_v2) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); +} + +////////// +// 4. Refinement Indexers +////////// +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Choice_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); +} +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" + +////////// +// 0. Util +////////// +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); +} + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find interpretation(problem,interpretation); + LogicProblem.elements(problem,element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); +} + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); +} + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); +} + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; +} + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find interpretation(problem,interpretation); + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { + find interpretation(problem,interpretation); + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); +} + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); +} + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); +} + +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); +} + +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); +} + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); +} + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); +} + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); +} + +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); +} + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); +} + +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); +} + +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); +} + +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); +} + +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". + */ +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class UndefinedPart"); +} + +/** + * An element may be an instance of type "Statechart class UndefinedPart". + */ +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, - var_s) +/** + * Matcher for detecting tuples t where <>target reference Transition(source,target) + */ +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); +} or { + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, - var_s, var_v1, var_v2) +/** + * Matcher for detecting tuples t where []source reference Transition(source,target) + */ +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, - var_s, var_v) +/** + * Matcher for detecting tuples t where <>source reference Transition(source,target) + */ +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, - var_s) +/** + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) + */ +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, - var_s1, var_s2) +/** + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) + */ +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } ////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors +// 1.3 Relation Definition Indexers ////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) { find interpretation(problem,interpretation); - find mustInstanceOfPseudostate_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfEntry_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfTransition_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfChoice_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfRegularState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ find interpretation(problem,interpretation); - find mustInstanceOfRegion_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ find interpretation(problem,interpretation); - find mustInstanceOfVertex_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - find mustInstanceOfExit_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - find mustInstanceOfFinalState_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - find mustInstanceOfSynchronization_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ find interpretation(problem,interpretation); - find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ find interpretation(problem,interpretation); - find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); } -pattern createObject_Choice_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfChoice_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; } -pattern createObject_Choice_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); - find mayInstanceOfChoice_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_Statechart_class_UndefinedPart( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_FinalState_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -pattern createObject_FinalState_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); - find mayInstanceOfFinalState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Region_class_by_regions_reference_CompositeElement( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); - find mustInstanceOfCompositeElement_class(problem,interpretation,container); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Region_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); - find mayInstanceOfRegion_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -pattern createObject_Entry_class_by_vertices_reference_Region( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfEntry_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); } -pattern createObject_Entry_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); - find mayInstanceOfEntry_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; } -pattern createObject_Exit_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; } -pattern createObject_Exit_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); - find mayInstanceOfExit_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern createObject_State_class_by_vertices_reference_Region( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -pattern createObject_State_class( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_e) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); - find mayInstanceOfState_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_f) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); - find mustInstanceOfVertex_class(problem,interpretation,container); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern createObject_Transition_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_t, var_f) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); - find mayInstanceOfTransition_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -pattern createObject_Synchronization_class_by_vertices_reference_Region( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_t, var_f) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); - find mustInstanceOfRegion_class(problem,interpretation,container); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); - find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -pattern createObject_Synchronization_class( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_region) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); - find mayInstanceOfSynchronization_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); -} - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } -pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); } -pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region, var_state) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } -pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfFinalState_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfState_class(problem,interpretation,element); - neg find mustInstanceOfStatechart_class(problem,interpretation,element); - neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } -pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfVertex_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } -pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfSynchronization_class(problem,interpretation,element); - neg find mustInstanceOfChoice_class(problem,interpretation,element); - neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); - neg find mustInstanceOfRegion_class(problem,interpretation,element); - neg find mustInstanceOfEntry_class(problem,interpretation,element); - neg find mustInstanceOfExit_class(problem,interpretation,element); - neg find mustInstanceOfTransition_class(problem,interpretation,element); - neg find mustInstanceOfRegularState_class(problem,interpretation,element); - neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_c) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); - PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); - PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfVertex_class(problem,interpretation,from); - find mustInstanceOfTransition_class(problem,interpretation,to); - find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); - neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "FileSystem class". - */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); - find directInstanceOf(problem,interpretation,element,type); +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } - -/** - * An element may be an instance of type "FileSystem class". - */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } -/** - * An element must be an instance of type "FSObject class". - */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); } - -/** - * An element may be an instance of type "FSObject class". - */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Dir class". - */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } - -/** - * An element may be an instance of type "Dir class". - */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } -/** - * An element must be an instance of type "File class". - */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } - -/** - * An element may be an instance of type "File class". - */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); -} - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mustInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mayInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( + problem:LogicProblem, interpretation:PartialInterpretation, + var_parent, var_child) +{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_composite) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_composite) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_composite) { find interpretation(problem,interpretation); - find mayInstanceOfFSObject_class(problem,interpretation,var_o1); - find mayInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mayInstanceOfDir_class(problem,interpretation,var_o1); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_o2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_s) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; -} -private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) + var_s) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; }or{ find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_l); -}or{ + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_root); - find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; }or{ find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } ////////// @@ -21511,13 +22745,11 @@ private pattern mustContains2(source: DefinedElement, target: DefinedElement) { private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } private pattern mustTransitiveContains(source,target) { find mustContains2+(source,target); @@ -21528,10 +22760,95 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); } ////////// @@ -21539,21 +22856,12 @@ pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesys ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } @@ -21561,3140 +22869,2796 @@ pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicPro ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); } - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) { - find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); } -pattern createObject_FileSystem_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) { - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); } -pattern createObject_File_class_by_otherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); } -pattern createObject_File_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); } -pattern createObject_Model_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); } -pattern createObject_Dir_class_by_root_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); } -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); } -pattern createObject_Dir_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) { - find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); } ////////// -// 4.2 Type refinement +// 4. Refinement Indexers ////////// -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { - find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); -} -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// 4.1 Object constructors +////////// +private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); -} -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); -} -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); -} - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_live_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ + find mustInstanceOfExit_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); -} - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; -} - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); -} - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { + find mustInstanceOfCompositeElement_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); -} - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); -} - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "FileSystem class". - */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); -} - -/** - * An element may be an instance of type "FileSystem class". - */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or { + find mustInstanceOfFinalState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } -/** - * An element must be an instance of type "FSObject class". - */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); -} - -/** - * An element may be an instance of type "FSObject class". - */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Dir class". - */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); + find mustExist(problem, interpretation, root); } - -/** - * An element may be an instance of type "Dir class". - */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } -/** - * An element must be an instance of type "File class". - */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } - -/** - * An element may be an instance of type "File class". - */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { +pattern createObject_Entry_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); -} - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +pattern createObject_FinalState_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( +pattern createObject_State_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mustInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mayInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( +pattern createObject_Exit_class( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( +pattern createObject_Statechart_class_UndefinedPart( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( + +////////// +// 4.2 Type refinement +////////// +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); +} +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); +} + +////////// +// 4.3 Relation refinement +////////// +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, + from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); + find mustExist(problem, interpretation, from); + find mustExist(problem, interpretation, to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); } +import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" +import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" ////////// -// 1.3 Relation Definition Indexers +// 0. Util ////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; +private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { + PartialInterpretation.problem(interpretation,problem); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) -{ + +///////////////////////// +// 0.1 Existence +///////////////////////// +private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - find mayInstanceOfFSObject_class(problem,interpretation,var_o1); - find mayInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mayInstanceOfDir_class(problem,interpretation,var_o1); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_o2); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( - problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) -{ + LogicProblem.elements(problem,element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; + PartialInterpretation.newElements(interpretation,element); } -private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + +private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + find mustExist(problem,interpretation,element); +} or { + find interpretation(problem,interpretation); + neg find elementCloseWorld(element); + PartialInterpretation.openWorldElements(interpretation,element); } -private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + +private pattern elementCloseWorld(element:DefinedElement) { + PartialInterpretation.openWorldElements(i,element); + PartialInterpretation.maxNewElements(i,0); +} or { + Scope.targetTypeInterpretation(scope,interpretation); + PartialTypeInterpratation.elements(interpretation,element); + Scope.maxNewElements(scope,0); } -private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + +//////////////////////// +// 0.2 Equivalence +//////////////////////// +pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { + find mayExist(problem,interpretation,a); + find mayExist(problem,interpretation,b); + a == b; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ + +//////////////////////// +// 0.3 Required Patterns by TypeIndexer +//////////////////////// +private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; -}or{ + LogicProblem.types(problem,type); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); +} + +private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_l); -}or{ + LogicProblem.types(problem,type); + TypeDefinition.elements(type,element); +} or { find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_root); - find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; -}or{ + find typeInterpretation(problem,interpretation,type,typeInterpretation); + PartialComplexTypeInterpretation.elements(typeInterpretation,element); +} + +private pattern isPrimitive(element: PrimitiveElement) { + PrimitiveElement(element); +} + +////////// +// 1. Problem-Specific Base Indexers +////////// +// 1.1 Type Indexers +////////// +// 1.1.1 primitive Type Indexers +////////// + +////////// +// 1.1.2 domain-specific Type Indexers +////////// +/** + * An element must be an instance of type "Pseudostate class". + */ +private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Pseudostate class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Pseudostate class"); } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( - problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + +/** + * An element may be an instance of type "Pseudostate class". + */ +private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewPseudostate_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfPseudostate_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Vertex class". + */ +private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Vertex class"); + find directInstanceOf(problem,interpretation,element,type); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( - problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) -{ - find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ +private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Vertex class"); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( - problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + +/** + * An element may be an instance of type "Vertex class". + */ +private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); -} - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewVertex_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfVertex_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Region class". + */ +private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Region class"); + find directInstanceOf(problem,interpretation,element,type); } - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or - - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or - - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); +private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Region class"); } -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) +/** + * An element may be an instance of type "Region class". + */ +private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); -} - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find scopeDisallowsNewRegion_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegion_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Transition class". + */ +private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Transition class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) -{ - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Transition class"); } -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +/** + * An element may be an instance of type "Transition class". + */ +private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewTransition_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfTransition_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class". + */ +private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_Model_class_UndefinedPart( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class"); } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +/** + * An element may be an instance of type "Statechart class". + */ +private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_File_class_by_otherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfStatechart_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Entry class". + */ +private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Entry class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_File_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Entry class"); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +/** + * An element may be an instance of type "Entry class". + */ +private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_FileSystem_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewEntry_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfEntry_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Synchronization class". + */ +private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Synchronization class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_Dir_class_by_root_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ +private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Synchronization class"); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + +/** + * An element may be an instance of type "Synchronization class". + */ +private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); -} -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( - problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) -{ + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewSynchronization_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfSynchronization_class(problem,interpretation,element); } +/** + * An element must be an instance of type "State class". + */ +private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"State class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern createObject_Dir_class( - problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) -{ +private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"State class"); } -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +/** + * An element may be an instance of type "State class". + */ +private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); -} -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "RegularState class". + */ +private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"RegularState class"); + find directInstanceOf(problem,interpretation,element,type); } -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"RegularState class"); } -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + +/** + * An element may be an instance of type "RegularState class". + */ +private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewRegularState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfRegularState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class". + */ +private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class"); + find directInstanceOf(problem,interpretation,element,type); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_live_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) -{ +private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class"); } -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); -} - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { +/** + * An element may be an instance of type "CompositeElement class". + */ +private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); } or { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Choice class". + */ +private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Choice class"); + find directInstanceOf(problem,interpretation,element,type); } - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); +private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Choice class"); } -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); +/** + * An element may be an instance of type "Choice class". + */ +private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); } or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewChoice_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfChoice_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Exit class". + */ +private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Exit class"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Exit class"); } -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; +/** + * An element may be an instance of type "Exit class". + */ +private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); + neg find scopeDisallowsNewExit_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfExit_class(problem,interpretation,element); } +/** + * An element must be an instance of type "FinalState class". + */ +private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"FinalState class"); + find directInstanceOf(problem,interpretation,element,type); } - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { +private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"FinalState class"); } -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { +/** + * An element may be an instance of type "FinalState class". + */ +private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); } or { find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewFinalState_class(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfFinalState_class(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class DefinedPart". + */ +private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); } - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); +private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"Statechart class DefinedPart"); } -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// /** - * An element must be an instance of type "FileSystem class". + * An element may be an instance of type "Statechart class DefinedPart". + */ +private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "Statechart class UndefinedPart". */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); +private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"Statechart class UndefinedPart"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); + Type.name(type,"Statechart class UndefinedPart"); } /** - * An element may be an instance of type "FileSystem class". + * An element may be an instance of type "Statechart class UndefinedPart". */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or { find interpretation(problem,interpretation); PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation); neg find isPrimitive(element); } or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } +{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class DefinedPart"); + find directInstanceOf(problem,interpretation,element,type); +} +private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { + find interpretation(problem,interpretation); + PartialInterpretation.scopes(interpretation,scope); + Scope.targetTypeInterpretation(scope,typeInterpretation); + Scope.maxNewElements(scope,0); + PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + Type.name(type,"CompositeElement class DefinedPart"); +} + /** - * An element must be an instance of type "FSObject class". + * An element may be an instance of type "CompositeElement class DefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); } +/** + * An element must be an instance of type "CompositeElement class UndefinedPart". */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); +private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { + Type.name(type,"CompositeElement class UndefinedPart"); find directInstanceOf(problem,interpretation,element,type); } -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); PartialInterpretation.scopes(interpretation,scope); Scope.targetTypeInterpretation(scope,typeInterpretation); Scope.maxNewElements(scope,0); PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); + Type.name(type,"CompositeElement class UndefinedPart"); +} + +/** + * An element may be an instance of type "CompositeElement class UndefinedPart". + */ +private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or { + find interpretation(problem,interpretation); + PartialInterpretation.openWorldElements(interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation); + neg find isPrimitive(element); +} or +{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); } + +////////// +// 1.2 Relation Declaration Indexers +////////// +/** + * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationincomingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); +} or { + find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target) + */ +private pattern mustInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target) + */ +private pattern mayInRelationoutgoingTransitions_reference_Vertex( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfVertex_class(problem,interpretation,source); + find mayInstanceOfTransition_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference to the target, + // the upper bound of the opposite reference multiplicity should be considered. + numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_); + check(numberOfExistingOppositeReferences < 1); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []vertices reference Region(source,target) + */ +private pattern mustInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); +} +/** + * Matcher for detecting tuples t where <>vertices reference Region(source,target) + */ +private pattern mayInRelationvertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfRegion_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); +} or { + find mustInRelationvertices_reference_Region(problem,interpretation,source,target); +} +/** + * Matcher for detecting tuples t where []target reference Transition(source,target) + */ +private pattern mustInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "FSObject class". + * Matcher for detecting tuples t where <>target reference Transition(source,target) */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationtarget_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } + find mustInRelationtarget_reference_Transition(problem,interpretation,source,target); +} /** - * An element must be an instance of type "Dir class". + * Matcher for detecting tuples t where []source reference Transition(source,target) */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "Dir class". + * Matcher for detecting tuples t where <>source reference Transition(source,target) */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationsource_reference_Transition( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfTransition_class(problem,interpretation,source); + find mayInstanceOfVertex_class(problem,interpretation,target); + // There are "numberOfExistingReferences" currently existing instances of the reference from the source, + // the upper bound of the multiplicity should be considered. + numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_); + check(numberOfExistingReferences < 1); + // The eOpposite of the reference is containment, then a referene cannot be created if + // 1. Multiple parents + neg find mustContains4(problem,interpretation,source,_); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } + find mustInRelationsource_reference_Transition(problem,interpretation,source,target); +} /** - * An element must be an instance of type "File class". + * Matcher for detecting tuples t where []regions reference CompositeElement(source,target) */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mustInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement"); + PartialRelationInterpretation.relationlinks(relationIterpretation,link); + BinaryElementRelationLink.param1(link,source); + BinaryElementRelationLink.param2(link,target); } - /** - * An element may be an instance of type "File class". + * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target) */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelationregions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + source: DefinedElement, target:DefinedElement) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); + // The two endpoint of the link have to exist + find mayExist(problem, interpretation, source); + find mayExist(problem, interpretation, target); + // Type consistency + find mayInstanceOfCompositeElement_class(problem,interpretation,source); + find mayInstanceOfRegion_class(problem,interpretation,target); + // The reference is containment, then a new reference cannot be create if: + // 1. Multiple parents + neg find mustContains4(problem,interpretation,_,target); + // 2. Circle in the containment hierarchy + neg find mustTransitiveContains(source,target); } or { + find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); +} + +////////// +// 1.3 Relation Definition Indexers +////////// +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; } -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_e1); } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1, var_e1) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInstanceOfEntry_class(problem,interpretation,var_e1); + // r1 is exported + // e1 is exported + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_e1; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); + find mayInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,var_r1); + // r1 is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0); } -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + neg find mayEquivalent(problem, interpretation, var_e1, var_e2); } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { + find mayInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( + find mustInstanceOfRegion_class(problem,interpretation,var_r); + // r is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2); + var_e1 != var_e2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_src, var_trg) +{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; +} +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfVertex_class(problem,interpretation,var_src); + find mayInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_src); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_trg); } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_t, var_src, var_trg) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfVertex_class(problem,interpretation,var_src); + find mustInstanceOfVertex_class(problem,interpretation,var_trg); + // t is exported + // src is exported + // trg is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_src; + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_trg; } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mustInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mayInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_t, var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // t is exported + // e is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e); } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_e) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_e) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_e) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + // e is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t1); + find mayInstanceOfEntry_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_t2); + var_t1 != var_t2; } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_e, var_t1, var_t2) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + // e is exported + // t1 is exported + // t2 is exported + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t1; + find mustInstanceOfEntry_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual1); + var_virtual1 == var_t2; + var_t1 != var_t2; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_t, var_e) { find interpretation(problem,interpretation); - find mayInstanceOfFSObject_class(problem,interpretation,var_o1); - find mayInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mayInstanceOfDir_class(problem,interpretation,var_o1); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_o2); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_t, var_e) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; -} -private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mayInstanceOfExit_class(problem,interpretation,var_e); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit( problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) + var_t, var_e) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_l); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_root); - find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfExit_class(problem,interpretation,var_e); + // t is exported + // e is exported + find mustInstanceOfExit_class(problem,interpretation,var_e); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_t, var_f) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_t, var_f) { find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mayInstanceOfTransition_class(problem,interpretation,var_t); + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mayInstanceOfFinalState_class(problem,interpretation,var_f); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mayInstanceOfTransition_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_t); } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) -{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); -} - -////////// -// 1.4 Containment Indexer -////////// -private pattern mustContains2(source: DefinedElement, target: DefinedElement) { - find mustContains4(_,_,source,target); -} - -private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or - - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or - - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } - -private pattern mustTransitiveContains(source,target) { - find mustContains2+(source,target); -} - -////////// -// 2. Invalidation Indexers -////////// -// 2.1 Invalidated by WF Queries -////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_t, var_f) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); -} - -////////// -// 3. Unfinishedness Indexers -////////// -// 3.1 Unfinishedness Measured by Multiplicity -////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} - -////////// -// 3.2 Unfinishedness Measured by WF Queries -////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) -{ - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + find mustInstanceOfTransition_class(problem,interpretation,var_t); + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + // t is exported + // f is exported + find mustInstanceOfFinalState_class(problem,interpretation,var_f); + find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0); + find mustInstanceOfTransition_class(problem,interpretation,var_virtual0); + var_virtual0 == var_t; } - -////////// -// 4. Refinement Indexers -////////// -// 4.1 Object constructors -////////// -private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_region) { find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); - find mustExist(problem, interpretation, root); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern createObject_Dir_class_by_root_reference_FileSystem( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_region) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_region) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + // region is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0); } -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_region, var_state) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } -pattern createObject_Dir_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_region, var_state) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mayInstanceOfRegion_class(problem,interpretation,var_region); + find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_state); } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_region, var_state) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInstanceOfState_class(problem,interpretation,var_state); + // region is exported + // state is exported + find mustInstanceOfRegion_class(problem,interpretation,var_region); + find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_state; } -pattern createObject_File_class_by_otherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_c) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } -pattern createObject_File_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_c) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } -pattern createObject_Model_class_UndefinedPart( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_c) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, - container:DefinedElement) + var_c) { find interpretation(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); - find mustExist(problem, interpretation, container); - neg find mustExist(problem, interpretation, newObject); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } -pattern createObject_FileSystem_class( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - typeInterpretation:PartialComplexTypeInterpretation) + var_c) { find interpretation(problem,interpretation); - neg find hasElementInContainment(problem,interpretation); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayExist(problem, interpretation, newObject); - neg find mustExist(problem, interpretation, newObject); + find mayInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } - -////////// -// 4.2 Type refinement -////////// -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + find mustInstanceOfChoice_class(problem,interpretation,var_c); + // c is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c); } -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1); } - -////////// -// 4.3 Relation refinement -////////// -pattern refineRelation_live_reference_FileSystem( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, - from: DefinedElement, to: DefinedElement) + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); - find mustExist(problem, interpretation, from); - find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); -} -import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" -import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" - -////////// -// 0. Util -////////// -private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { - PartialInterpretation.problem(interpretation,problem); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } - -///////////////////////// -// 0.1 Existence -///////////////////////// -private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find interpretation(problem,interpretation); - LogicProblem.elements(problem,element); -} or { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); -} - -private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - find mustExist(problem,interpretation,element); -} or { - find interpretation(problem,interpretation); - neg find elementCloseWorld(element); - PartialInterpretation.openWorldElements(interpretation,element); -} - -private pattern elementCloseWorld(element:DefinedElement) { - PartialInterpretation.openWorldElements(i,element); - PartialInterpretation.maxNewElements(i,0); -} or { - Scope.targetTypeInterpretation(scope,interpretation); - PartialTypeInterpratation.elements(interpretation,element); - Scope.maxNewElements(scope,0); -} - -//////////////////////// -// 0.2 Equivalence -//////////////////////// -pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { - find mayExist(problem,interpretation,a); - find mayExist(problem,interpretation,b); - a == b; + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } - -//////////////////////// -// 0.3 Required Patterns by TypeIndexer -//////////////////////// -private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s); } - -private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { - find interpretation(problem,interpretation); - LogicProblem.types(problem,type); - TypeDefinition.elements(type,element); -} or { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ find interpretation(problem,interpretation); - find typeInterpretation(problem,interpretation,type,typeInterpretation); - PartialComplexTypeInterpretation.elements(typeInterpretation,element); -} - -private pattern isPrimitive(element: PrimitiveElement) { - PrimitiveElement(element); -} - -////////// -// 1. Problem-Specific Base Indexers -////////// -// 1.1 Type Indexers -////////// -// 1.1.1 primitive Type Indexers -////////// - -////////// -// 1.1.2 domain-specific Type Indexers -////////// -/** - * An element must be an instance of type "FileSystem class". - */ -private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FileSystem class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FileSystem class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } - -/** - * An element may be an instance of type "FileSystem class". - */ -private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewFileSystem_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFileSystem_class(problem,interpretation,element); } -/** - * An element must be an instance of type "FSObject class". - */ -private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"FSObject class"); - find directInstanceOf(problem,interpretation,element,type); -} -private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) { + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); +}or{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"FSObject class"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_v1); + find mayInstanceOfRegion_class(problem,interpretation,var_r); + find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v2); } - -/** - * An element may be an instance of type "FSObject class". - */ -private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or { + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; +}or{ find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFSObject_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFSObject_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Dir class". - */ -private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Dir class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2); + var_t1 != var_t2; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_v1; + find mustInstanceOfRegion_class(problem,interpretation,var_r); + find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v2; } -private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Dir class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } - -/** - * An element may be an instance of type "Dir class". - */ -private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewDir_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfDir_class(problem,interpretation,element); } -/** - * An element must be an instance of type "File class". - */ -private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"File class"); - find directInstanceOf(problem,interpretation,element,type); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } -private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"File class"); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s); } - -/** - * An element may be an instance of type "File class". - */ -private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find scopeDisallowsNewFile_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfFile_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class". - */ -private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2); } -private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } - -/** - * An element may be an instance of type "Model class". - */ -private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class DefinedPart". - */ -private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class DefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2); + var_trg1 != var_trg2; } -private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class DefinedPart"); -} - -/** - * An element may be an instance of type "Model class DefinedPart". - */ -private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) -{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); } -/** - * An element must be an instance of type "Model class UndefinedPart". - */ -private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { - Type.name(type,"Model class UndefinedPart"); - find directInstanceOf(problem,interpretation,element,type); + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + neg find mayEquivalent(problem, interpretation, var_src1, var_src2); } -private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) { +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) +{ find interpretation(problem,interpretation); - PartialInterpretation.scopes(interpretation,scope); - Scope.targetTypeInterpretation(scope,typeInterpretation); - Scope.maxNewElements(scope,0); - PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); - Type.name(type,"Model class UndefinedPart"); + find mayInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; } - -/** - * An element may be an instance of type "Model class UndefinedPart". - */ -private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition( + problem:LogicProblem, interpretation:PartialInterpretation, + var_v) { find interpretation(problem,interpretation); - PartialInterpretation.newElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or { - find interpretation(problem,interpretation); - PartialInterpretation.openWorldElements(interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); - neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation); - neg find isPrimitive(element); -} or -{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); } - -////////// -// 1.2 Relation Declaration Indexers -////////// -/** - * Matcher for detecting tuples t where []root reference FileSystem(source,target) - */ -private pattern mustInRelationroot_reference_FileSystem( + find mustInstanceOfSynchronization_class(problem,interpretation,var_v); + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v); + var_src1 != var_src2; +} +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + neg find mayEquivalent(problem, interpretation, var_r1, var_r2); } -/** - * Matcher for detecting tuples t where <>root reference FileSystem(source,target) - */ -private pattern mayInRelationroot_reference_FileSystem( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFileSystem_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v1); + find mayInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_v1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual3); + find mayEquivalent(problem, interpretation, var_virtual3, var_v2); + var_r1 != var_r2; } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mustInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []live reference FileSystem(source,target) - */ - private pattern mayInRelationlive_reference_FileSystem( - problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) - { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target); - } -/** - * Matcher for detecting tuples t where []parent reference FSObject(source,target) - */ -private pattern mustInRelationparent_reference_FSObject( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v1, var_v2) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v1); + find mustInstanceOfVertex_class(problem,interpretation,var_v2); + // s is exported + // v1 is exported + // v2 is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_v1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual2); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual3); + var_virtual3 == var_v2; + var_r1 != var_r2; } -/** - * Matcher for detecting tuples t where <>parent reference FSObject(source,target) - */ -private pattern mayInRelationparent_reference_FSObject( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfFSObject_class(problem,interpretation,source); - find mayInstanceOfDir_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The eOpposite of the reference is containment, then a referene cannot be created if - // 1. Multiple parents - neg find mustContains4(problem,interpretation,source,_); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationparent_reference_FSObject(problem,interpretation,source,target); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -/** - * Matcher for detecting tuples t where []contents reference Dir(source,target) - */ -private pattern mustInRelationcontents_reference_Dir( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_child); } -/** - * Matcher for detecting tuples t where <>contents reference Dir(source,target) - */ -private pattern mayInRelationcontents_reference_Dir( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_parent, var_child) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfDir_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference to the target, - // the upper bound of the opposite reference multiplicity should be considered. - numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_); - check(numberOfExistingOppositeReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInstanceOfVertex_class(problem,interpretation,var_child); + // parent is exported + // child is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_child; } -/** - * Matcher for detecting tuples t where []filesystems reference Model(source,target) - */ -private pattern mustInRelationfilesystems_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where <>filesystems reference Model(source,target) - */ -private pattern mayInRelationfilesystems_reference_Model( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFileSystem_class(problem,interpretation,target); - // There are "numberOfExistingReferences" currently existing instances of the reference from the source, - // the upper bound of the multiplicity should be considered. - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_); - check(numberOfExistingReferences < 1); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + find mayInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target) - */ -private pattern mustInRelationotherFSObjects_reference_Model( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_s, var_v) { find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model"); - PartialRelationInterpretation.relationlinks(relationIterpretation,link); - BinaryElementRelationLink.param1(link,source); - BinaryElementRelationLink.param2(link,target); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + find mustInstanceOfVertex_class(problem,interpretation,var_v); + // s is exported + // v is exported + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v); + neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c); } -/** - * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target) - */ -private pattern mayInRelationotherFSObjects_reference_Model( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - source: DefinedElement, target:DefinedElement) + var_composite) { find interpretation(problem,interpretation); - // The two endpoint of the link have to exist - find mayExist(problem, interpretation, source); - find mayExist(problem, interpretation, target); - // Type consistency - find mayInstanceOfModel_class(problem,interpretation,source); - find mayInstanceOfFSObject_class(problem,interpretation,target); - // The reference is containment, then a new reference cannot be create if: - // 1. Multiple parents - neg find mustContains4(problem,interpretation,_,target); - // 2. Circle in the containment hierarchy - neg find mustTransitiveContains(source,target); -} or { - find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + neg find mayEquivalent(problem, interpretation, var_region1, var_region2); } - -////////// -// 1.3 Relation Definition Indexers -////////// -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_composite) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_region1); + find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mayInstanceOfRegion_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_region2); + var_region1 != var_region2; } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_composite) { find interpretation(problem,interpretation); - find mayInstanceOfFSObject_class(problem,interpretation,var_o1); - find mayInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mayInstanceOfDir_class(problem,interpretation,var_o1); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_o2); + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + // composite is exported + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual0); + var_virtual0 == var_region1; + find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite); + find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1); + find mustInstanceOfRegion_class(problem,interpretation,var_virtual1); + var_virtual1 == var_region2; + var_region1 != var_region2; } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( problem:LogicProblem, interpretation:PartialInterpretation, - var_o1, var_o2) + var_s) { find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,var_o1); - find mustInstanceOfFSObject_class(problem,interpretation,var_o2); - // o1 is exported - // o2 is exported - find mustInstanceOfDir_class(problem,interpretation,var_o1); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_o2; -} -private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); -} -private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + neg find mayEquivalent(problem, interpretation, var_t1, var_t2); + neg find mayEquivalent(problem, interpretation, var_t2, var_t3); + neg find mayEquivalent(problem, interpretation, var_t1, var_t3); } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) + var_s) { find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; }or{ find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_l); -}or{ + find mayInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mayInstanceOfTransition_class(problem,interpretation,var_t1); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual0); + find mayEquivalent(problem, interpretation, var_virtual0, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t2); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual1); + find mayEquivalent(problem, interpretation, var_virtual1, var_s); + find mayInstanceOfTransition_class(problem,interpretation,var_t3); + find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mayInstanceOfVertex_class(problem,interpretation,var_virtual2); + find mayEquivalent(problem, interpretation, var_virtual2, var_s); + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; +} +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree( + problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ find interpretation(problem,interpretation); - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mayInstanceOfFileSystem_class(problem,interpretation,var_this); - find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mayInstanceOfDir_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_root); - find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); -} -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live( - problem:LogicProblem, interpretation:PartialInterpretation, - var_this, var_l) -{ - find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_l; + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; }or{ find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInstanceOfFSObject_class(problem,interpretation,var_l); - // this is exported - // l is exported - find mustInstanceOfFileSystem_class(problem,interpretation,var_this); - find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0); - find mustInstanceOfDir_class(problem,interpretation,var_virtual0); - var_virtual0 == var_root; - find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s); + // s is exported + find mustInstanceOfTransition_class(problem,interpretation,var_t1); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual0); + var_virtual0 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t2); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual1); + var_virtual1 == var_s; + find mustInstanceOfTransition_class(problem,interpretation,var_t3); + find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2); + find mustInstanceOfVertex_class(problem,interpretation,var_virtual2); + var_virtual2 == var_s; + var_t1 != var_t2; + var_t2 != var_t3; + var_t1 != var_t3; } -// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive -private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch +private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + neg find mayEquivalent(problem, interpretation, var_s1, var_s2); } -private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mayInstanceOfDir_class(problem,interpretation,var_parent); - find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0); - find mayEquivalent(problem, interpretation, var_virtual0, var_child); - neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mayInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mayInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } -private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive( +private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch( problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) + var_s1, var_s2) { find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent); -}or{ - find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInstanceOfFSObject_class(problem,interpretation,var_child); - // parent is exported - // child is exported - find mustInstanceOfDir_class(problem,interpretation,var_parent); - find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0); - find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0); - var_virtual0 == var_child; - neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + // s1 is exported + // s2 is exported + find mustInstanceOfSynchronization_class(problem,interpretation,var_s1); + find mustInstanceOfSynchronization_class(problem,interpretation,var_s2); + var_s1 != var_s2; } ////////// @@ -24706,13 +25670,11 @@ private pattern mustContains2(source: DefinedElement, target: DefinedElement) { private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, source: DefinedElement, target: DefinedElement) - { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or - - { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or + { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or - { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or + { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or - { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); } + { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); } private pattern mustTransitiveContains(source,target) { find mustContains2+(source,target); @@ -24723,10 +25685,95 @@ private pattern mustTransitiveContains(source,target) { ////////// // 2.1 Invalidated by WF Queries ////////// -pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) { - find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); } ////////// @@ -24734,21 +25781,12 @@ pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesys ////////// // 3.1 Unfinishedness Measured by Multiplicity ////////// -pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { - find interpretation(problem,interpretation); - PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_); - check(numberOfExistingReferences < 1); - missingMultiplicity == eval(1-numberOfExistingReferences); -} -pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { +pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,object); - numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition"); + find mustInstanceOfTransition_class(problem,interpretation,object); + numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_); check(numberOfExistingReferences < 1); missingMultiplicity == eval(1-numberOfExistingReferences); } @@ -24756,10 +25794,95 @@ pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicPro ////////// // 3.2 Unfinishedness Measured by WF Queries ////////// -pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation, - var_parent, var_child) +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r1) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_r) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation, + var_e, var_t1, var_t2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_e) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation, + var_t, var_f) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_region) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_c) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v1, var_v2) { - find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child); + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation, + var_s, var_v) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation, + var_s) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s); +} +pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation, + var_s1, var_s2) +{ + find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2); } ////////// @@ -24770,178 +25893,308 @@ pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesyst private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) { find interpretation(problem,interpretation); - find mustInstanceOfModel_class(problem,interpretation,root); + find mustInstanceOfState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfSynchronization_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegion_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfRegularState_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfPseudostate_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfVertex_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfStatechart_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfEntry_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfTransition_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfChoice_class(problem,interpretation,root); + find mustExist(problem, interpretation, root); +}or{ + find interpretation(problem,interpretation); + find mustInstanceOfExit_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFile_class(problem,interpretation,root); + find mustInstanceOfCompositeElement_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFSObject_class(problem,interpretation,root); + find mustInstanceOfFinalState_class(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfFileSystem_class(problem,interpretation,root); + find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfDir_class(problem,interpretation,root); + find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root); + find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); }or{ find interpretation(problem,interpretation); - find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root); + find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root); find mustExist(problem, interpretation, root); } -pattern createObject_Dir_class_by_root_reference_FileSystem( +pattern createObject_Statechart_class_UndefinedPart( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart"); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Exit_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem"); - find mustInstanceOfFileSystem_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject( +pattern createObject_Exit_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class"); + find mayInstanceOfExit_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex"); PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition"); + find mustInstanceOfVertex_class(problem,interpretation,container); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class_by_otherFSObjects_reference_Model( +pattern createObject_Transition_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class"); + find mayInstanceOfTransition_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_State_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfDir_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Dir_class( +pattern createObject_State_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class"); - find mayInstanceOfDir_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class"); + find mayInstanceOfState_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FileSystem_class_by_filesystems_reference_Model( +pattern createObject_Choice_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); - find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfChoice_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_FileSystem_class( +pattern createObject_Choice_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class"); - find mayInstanceOfFileSystem_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class"); + find mayInstanceOfChoice_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_Model_class_UndefinedPart( +pattern createObject_Entry_class_by_vertices_reference_Region( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfEntry_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Entry_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart"); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class"); + find mayInstanceOfEntry_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject( +pattern createObject_FinalState_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, - relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir"); - PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation); - PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject"); - find mustInstanceOfDir_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); + find mustExist(problem, interpretation, container); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_FinalState_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class"); + find mayInstanceOfFinalState_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Region_class_by_regions_reference_CompositeElement( + problem:LogicProblem, interpretation:PartialInterpretation, + relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, + container:DefinedElement) +{ + find interpretation(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement"); + find mustInstanceOfCompositeElement_class(problem,interpretation,container); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class_by_otherFSObjects_reference_Model( +pattern createObject_Region_class( + problem:LogicProblem, interpretation:PartialInterpretation, + typeInterpretation:PartialComplexTypeInterpretation) +{ + find interpretation(problem,interpretation); + neg find hasElementInContainment(problem,interpretation); + PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class"); + find mayInstanceOfRegion_class(problem,interpretation,newObject); + find mayExist(problem, interpretation, newObject); + neg find mustExist(problem, interpretation, newObject); +} +pattern createObject_Synchronization_class_by_vertices_reference_Region( problem:LogicProblem, interpretation:PartialInterpretation, relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, container:DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); - PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model"); - find mustInstanceOfModel_class(problem,interpretation,container); - find mayInstanceOfFile_class(problem,interpretation,newObject); - find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject); + PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region"); + find mustInstanceOfRegion_class(problem,interpretation,container); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); + find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject); find mustExist(problem, interpretation, container); neg find mustExist(problem, interpretation, newObject); } -pattern createObject_File_class( +pattern createObject_Synchronization_class( problem:LogicProblem, interpretation:PartialInterpretation, typeInterpretation:PartialComplexTypeInterpretation) { find interpretation(problem,interpretation); neg find hasElementInContainment(problem,interpretation); PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); - PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class"); - find mayInstanceOfFile_class(problem,interpretation,newObject); + PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class"); + find mayInstanceOfSynchronization_class(problem,interpretation,newObject); find mayExist(problem, interpretation, newObject); neg find mustExist(problem, interpretation, newObject); } @@ -24949,56 +26202,124 @@ pattern createObject_File_class( ////////// // 4.2 Type refinement ////////// -pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfStatechart_class(problem,interpretation,element); + neg find mustInstanceOfState_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); +} +pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { + find interpretation(problem,interpretation); + PartialInterpretation.newElements(interpretation,element); + find mayInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); +} +pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + find mayInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } -pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); + find mayInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfPseudostate_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfFinalState_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); - neg find mustInstanceOfFSObject_class(problem,interpretation,element); + find mayInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfVertex_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); } -pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { +pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.newElements(interpretation,element); - find mayInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfDir_class(problem,interpretation,element); - neg find mustInstanceOfFileSystem_class(problem,interpretation,element); - neg find mustInstanceOfFile_class(problem,interpretation,element); - neg find mustInstanceOfModel_class(problem,interpretation,element); + find mayInstanceOfSynchronization_class(problem,interpretation,element); + neg find mustInstanceOfExit_class(problem,interpretation,element); + neg find mustInstanceOfTransition_class(problem,interpretation,element); + neg find mustInstanceOfRegularState_class(problem,interpretation,element); + neg find mustInstanceOfCompositeElement_class(problem,interpretation,element); + neg find mustInstanceOfChoice_class(problem,interpretation,element); + neg find mustInstanceOfEntry_class(problem,interpretation,element); + neg find mustInstanceOfRegion_class(problem,interpretation,element); + neg find mustInstanceOfSynchronization_class(problem,interpretation,element); } ////////// // 4.3 Relation refinement ////////// -pattern refineRelation_live_reference_FileSystem( +pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition( problem:LogicProblem, interpretation:PartialInterpretation, - relationIterpretation:PartialRelationInterpretation, + relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, from: DefinedElement, to: DefinedElement) { find interpretation(problem,interpretation); PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); - PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem"); + PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex"); + PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); + PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition"); find mustExist(problem, interpretation, from); find mustExist(problem, interpretation, to); - find mustInstanceOfFileSystem_class(problem,interpretation,from); - find mustInstanceOfFSObject_class(problem,interpretation,to); - find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to); - neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to); + find mustInstanceOfVertex_class(problem,interpretation,from); + find mustInstanceOfTransition_class(problem,interpretation,to); + find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); + neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); } 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 991c88fd..2079fe25 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,23 +1,33 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + - + - + - + @@ -25,24 +35,24 @@ - + - + - + - + - + - + @@ -56,24 +66,24 @@ - + - + - + - + - + - + @@ -87,220 +97,1358 @@ - + - + - - - - - - - - - - + + + + + + + + + + + + - + - - - - + - - + + - - - - - - - - - - + + + + - - - - - + + + - + - - - - + - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - + + - + + - - - + + + + + + + + + + - - + + - + + + + + - - - - - - - - + + + + - - - - - - - - - + + + - - - + + + + + + + + + - - + - - + - - - - - - + + + + + + - + - + - - - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 6c0e5571..5479fb8d 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 @@ -1,5 +1,5 @@ - + @@ -37,25 +37,53 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -66,4 +94,13 @@ + + + + + + + + + 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 162931cc..977a3efc 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 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 +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, 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 startedUnable to solve problem, but 0 model generated!Model generation finishedModel generation startedUnable to solve problem, but 0 model generated!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, 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, 5 models are generated!Models: [1.xmi][2.xmi][3.xmi][4.xmi][5.xmi]Visualisations: [1.gml][2.gml][3.gml][4.gml][5.gml]Visualisations: [1.png][2.png][3.png][4.png][5.png]Model generation finished \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml index e73f85db..897aa2d4 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 @@ -150,8 +150,8 @@ graph id 4 graphics [ - w 107.80000000000001 - h 40 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -171,7 +171,9 @@ graph LabelGraphics [ text " - Region class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -186,7 +188,7 @@ graph id 5 graphics [ - w 154.0 + w 146.3 h 68 type "rectangle" fill "#FFFFFF" @@ -207,9 +209,9 @@ graph LabelGraphics [ text " + Pseudostate class Vertex class - RegularState class - FinalState class + Entry class " fontSize 14 fontName "Consolas" @@ -224,8 +226,44 @@ graph id 6 graphics [ - w 154.0 - h 68 + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -246,8 +284,10 @@ graph [ text " Vertex class + State class RegularState class - FinalState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -259,7 +299,7 @@ graph node [ - id 7 + id 8 graphics [ w 112.2 @@ -294,7 +334,7 @@ graph node [ - id 8 + id 9 graphics [ w 85.80000000000001 @@ -329,7 +369,7 @@ graph node [ - id 9 + id 10 graphics [ w 103.4 @@ -364,7 +404,7 @@ graph node [ - id 10 + id 11 graphics [ w 103.4 @@ -399,7 +439,46 @@ graph edge [ source 4 - target 5 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 graphics [ fill "#000000" @@ -419,7 +498,7 @@ graph edge [ source 3 - target 6 + target 5 graphics [ fill "#000000" @@ -438,8 +517,8 @@ graph ] edge [ - source 0 - target 3 + source 3 + target 7 graphics [ fill "#000000" @@ -448,7 +527,7 @@ graph ] LabelGraphics [ - text "regions reference CompositeElement" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -458,9 +537,47 @@ graph ] edge [ - source 0 + source 6 target 4 graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics [ fill "#000000" width 3 @@ -593,8 +710,8 @@ graph id 3 graphics [ - w 107.80000000000001 - h 40 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -602,7 +719,7 @@ graph ] LabelGraphics [ - text "null" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -614,7 +731,6 @@ graph LabelGraphics [ text " - Region class " fontSize 14 fontName "Consolas" @@ -629,8 +745,8 @@ graph id 4 graphics [ - w 292.6 - h 96 + w 85.80000000000001 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -638,7 +754,7 @@ graph ] LabelGraphics [ - text "null" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -650,11 +766,6 @@ graph LabelGraphics [ text " - Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -669,8 +780,8 @@ graph id 5 graphics [ - w 146.3 - h 68 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -678,7 +789,7 @@ graph ] LabelGraphics [ - text "null" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -690,9 +801,6 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Entry class " fontSize 14 fontName "Consolas" @@ -707,8 +815,8 @@ graph id 6 graphics [ - w 138.60000000000002 - h 40 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -716,7 +824,7 @@ graph ] LabelGraphics [ - text "null" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -728,7 +836,6 @@ graph LabelGraphics [ text " - Transition class " fontSize 14 fontName "Consolas" @@ -737,14 +844,16 @@ graph borderDistance 6 ] ] - +] +graph +[ node [ - id 7 + id 0 graphics [ - w 112.2 - h 26 + w 277.20000000000005 + h 82 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -752,7 +861,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "o 1" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -764,6 +873,10 @@ graph LabelGraphics [ text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class " fontSize 14 fontName "Consolas" @@ -775,10 +888,10 @@ graph node [ - id 8 + id 1 graphics [ - w 85.80000000000001 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -787,7 +900,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -810,10 +923,10 @@ graph node [ - id 9 + id 2 graphics [ - w 103.4 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -822,7 +935,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -845,11 +958,11 @@ graph node [ - id 10 + id 3 graphics [ - w 103.4 - h 26 + w 107.80000000000001 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -857,7 +970,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -869,6 +982,7 @@ graph LabelGraphics [ text " + Region class " fontSize 14 fontName "Consolas" @@ -877,153 +991,52 @@ graph borderDistance 6 ] ] - edge - [ - source 4 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 6 - graphics + + node [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 4 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - ] -] -graph -[ + node [ - id 0 + id 5 graphics [ - w 277.20000000000005 - h 82 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1031,7 +1044,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1043,10 +1056,9 @@ graph LabelGraphics [ text " - Statechart class DefinedPart - CompositeElement class DefinedPart - Statechart class - CompositeElement class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -1058,11 +1070,11 @@ graph node [ - id 1 + id 6 graphics [ - w 41.800000000000004 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1070,7 +1082,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1082,6 +1094,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -1093,11 +1108,11 @@ graph node [ - id 2 + id 7 graphics [ - w 50.6 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1105,7 +1120,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1117,6 +1132,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Entry class " fontSize 14 fontName "Consolas" @@ -1128,10 +1146,10 @@ graph node [ - id 3 + id 8 graphics [ - w 107.80000000000001 + w 138.60000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -1152,7 +1170,7 @@ graph LabelGraphics [ text " - Region class + Transition class " fontSize 14 fontName "Consolas" @@ -1164,11 +1182,11 @@ graph node [ - id 4 + id 9 graphics [ - w 146.3 - h 68 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1188,9 +1206,11 @@ graph LabelGraphics [ text " - Pseudostate class Vertex class - Entry class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1202,7 +1222,7 @@ graph node [ - id 5 + id 10 graphics [ w 138.60000000000002 @@ -1238,7 +1258,7 @@ graph node [ - id 6 + id 11 graphics [ w 292.6 @@ -1278,7 +1298,7 @@ graph node [ - id 7 + id 12 graphics [ w 138.60000000000002 @@ -1314,11 +1334,11 @@ graph node [ - id 8 + id 13 graphics [ - w 112.2 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1326,7 +1346,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1338,6 +1358,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1349,11 +1374,11 @@ graph node [ - id 9 + id 14 graphics [ - w 85.80000000000001 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1361,7 +1386,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1373,6 +1398,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1384,11 +1414,11 @@ graph node [ - id 10 + id 15 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1396,7 +1426,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1408,6 +1438,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1419,11 +1450,11 @@ graph node [ - id 11 + id 16 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1431,7 +1462,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1443,6 +1474,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1451,230 +1483,14 @@ graph borderDistance 6 ] ] - edge - [ - source 6 - target 7 - graphics + + node [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 4 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 6 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 4 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 + id 17 graphics [ - w 277.20000000000005 - h 82 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1682,7 +1498,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1694,10 +1510,11 @@ graph LabelGraphics [ text " - Statechart class DefinedPart - CompositeElement class DefinedPart - Statechart class + Vertex class + State class + RegularState class CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1709,11 +1526,11 @@ graph node [ - id 1 + id 18 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1721,7 +1538,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1733,6 +1550,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1744,11 +1562,11 @@ graph node [ - id 2 + id 19 graphics [ - w 50.6 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1756,7 +1574,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1768,6 +1586,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1779,11 +1598,11 @@ graph node [ - id 3 + id 20 graphics [ - w 107.80000000000001 - h 40 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1803,7 +1622,11 @@ graph LabelGraphics [ text " - Region class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1815,11 +1638,11 @@ graph node [ - id 4 + id 21 graphics [ - w 154.0 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1839,9 +1662,7 @@ graph LabelGraphics [ text " - Vertex class - RegularState class - FinalState class + Transition class " fontSize 14 fontName "Consolas" @@ -1853,7 +1674,7 @@ graph node [ - id 5 + id 22 graphics [ w 146.3 @@ -1879,7 +1700,7 @@ graph text " Pseudostate class Vertex class - Entry class + Exit class " fontSize 14 fontName "Consolas" @@ -1891,11 +1712,11 @@ graph node [ - id 6 + id 23 graphics [ - w 292.6 - h 96 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1915,11 +1736,7 @@ graph LabelGraphics [ text " - Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart + Transition class " fontSize 14 fontName "Consolas" @@ -1931,11 +1748,11 @@ graph node [ - id 7 + id 24 graphics [ - w 138.60000000000002 - h 40 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1955,7 +1772,9 @@ graph LabelGraphics [ text " - Transition class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -1967,11 +1786,11 @@ graph node [ - id 8 + id 25 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1979,7 +1798,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1991,6 +1810,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2002,11 +1822,11 @@ graph node [ - id 9 + id 26 graphics [ - w 85.80000000000001 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2014,7 +1834,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2026,6 +1846,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2037,11 +1862,11 @@ graph node [ - id 10 + id 27 graphics [ - w 103.4 - h 26 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2049,7 +1874,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2061,6 +1886,9 @@ graph LabelGraphics [ text " + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -2072,11 +1900,11 @@ graph node [ - id 11 + id 28 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2084,7 +1912,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2096,6 +1924,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2104,173 +1933,14 @@ graph borderDistance 6 ] ] - edge - [ - source 6 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 29 graphics [ - w 277.20000000000005 - h 82 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2278,7 +1948,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2290,10 +1960,7 @@ graph LabelGraphics [ text " - Statechart class DefinedPart - CompositeElement class DefinedPart - Statechart class - CompositeElement class + Transition class " fontSize 14 fontName "Consolas" @@ -2305,11 +1972,11 @@ graph node [ - id 1 + id 30 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2317,7 +1984,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2329,6 +1996,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2340,11 +2008,11 @@ graph node [ - id 2 + id 31 graphics [ - w 50.6 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2352,7 +2020,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2364,6 +2032,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2375,10 +2044,10 @@ graph node [ - id 3 + id 32 graphics [ - w 107.80000000000001 + w 138.60000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -2399,7 +2068,7 @@ graph LabelGraphics [ text " - Region class + Transition class " fontSize 14 fontName "Consolas" @@ -2411,11 +2080,11 @@ graph node [ - id 4 + id 33 graphics [ - w 146.3 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2435,9 +2104,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Exit class + Transition class " fontSize 14 fontName "Consolas" @@ -2449,11 +2116,11 @@ graph node [ - id 5 + id 34 graphics [ - w 146.3 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2473,9 +2140,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Entry class + Transition class " fontSize 14 fontName "Consolas" @@ -2487,11 +2152,11 @@ graph node [ - id 6 + id 35 graphics [ - w 292.6 - h 96 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2511,11 +2176,7 @@ graph LabelGraphics [ text " - Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart + Transition class " fontSize 14 fontName "Consolas" @@ -2527,11 +2188,11 @@ graph node [ - id 7 + id 36 graphics [ - w 138.60000000000002 - h 40 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2551,7 +2212,9 @@ graph LabelGraphics [ text " - Transition class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -2563,11 +2226,11 @@ graph node [ - id 8 + id 37 graphics [ - w 112.2 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2575,7 +2238,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2587,6 +2250,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -2598,11 +2264,11 @@ graph node [ - id 9 + id 38 graphics [ - w 85.80000000000001 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2610,7 +2276,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2622,6 +2288,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2633,11 +2300,11 @@ graph node [ - id 10 + id 39 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2645,7 +2312,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2657,6 +2324,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2668,11 +2336,11 @@ graph node [ - id 11 + id 40 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2680,7 +2348,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2692,6 +2360,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2700,173 +2369,14 @@ graph borderDistance 6 ] ] - edge - [ - source 6 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 6 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 41 graphics [ - w 192.50000000000003 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2874,7 +2384,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2886,8 +2396,7 @@ graph LabelGraphics [ text " - Model class DefinedPart - Model class + Transition class " fontSize 14 fontName "Consolas" @@ -2899,11 +2408,11 @@ graph node [ - id 1 + id 42 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2911,7 +2420,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2923,6 +2432,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2934,11 +2444,11 @@ graph node [ - id 2 + id 43 graphics [ - w 50.6 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2946,7 +2456,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2958,6 +2468,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2969,11 +2480,11 @@ graph node [ - id 3 + id 44 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2993,8 +2504,7 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Transition class " fontSize 14 fontName "Consolas" @@ -3006,11 +2516,11 @@ graph node [ - id 4 + id 45 graphics [ - w 123.20000000000002 - h 54 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3030,8 +2540,9 @@ graph LabelGraphics [ text " - FSObject class - File class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -3043,7 +2554,7 @@ graph node [ - id 5 + id 46 graphics [ w 138.60000000000002 @@ -3067,7 +2578,7 @@ graph LabelGraphics [ text " - FileSystem class + Transition class " fontSize 14 fontName "Consolas" @@ -3079,11 +2590,11 @@ graph node [ - id 6 + id 47 graphics [ - w 123.20000000000002 - h 54 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3103,8 +2614,11 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -3116,11 +2630,11 @@ graph node [ - id 7 + id 48 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3128,7 +2642,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3140,6 +2654,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -3151,11 +2666,11 @@ graph node [ - id 8 + id 49 graphics [ - w 85.80000000000001 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3163,7 +2678,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3175,6 +2690,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -3186,11 +2702,11 @@ graph node [ - id 9 + id 50 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3198,7 +2714,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3210,6 +2726,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -3221,11 +2738,11 @@ graph node [ - id 10 + id 51 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3233,7 +2750,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3245,6 +2762,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -3253,96 +2771,14 @@ graph borderDistance 6 ] ] - edge - [ - source 5 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "root reference FileSystem" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "filesystems reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 52 graphics [ - w 192.50000000000003 - h 54 + w 112.2 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3350,7 +2786,7 @@ graph ] LabelGraphics [ - text "o 1" + text "New Integers" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3362,8 +2798,6 @@ graph LabelGraphics [ text " - Model class DefinedPart - Model class " fontSize 14 fontName "Consolas" @@ -3375,10 +2809,10 @@ graph node [ - id 1 + id 53 graphics [ - w 41.800000000000004 + w 85.80000000000001 h 26 type "rectangle" fill "#FFFFFF" @@ -3387,7 +2821,7 @@ graph ] LabelGraphics [ - text "true" + text "New Reals" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3410,10 +2844,10 @@ graph node [ - id 2 + id 54 graphics [ - w 50.6 + w 103.4 h 26 type "rectangle" fill "#FFFFFF" @@ -3422,7 +2856,7 @@ graph ] LabelGraphics [ - text "false" + text "New Strings" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3445,11 +2879,11 @@ graph node [ - id 3 + id 55 graphics [ - w 123.20000000000002 - h 54 + w 103.4 + h 26 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3457,7 +2891,7 @@ graph ] LabelGraphics [ - text "null" + text "New Objects" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3469,8 +2903,6 @@ graph LabelGraphics [ text " - FSObject class - File class " fontSize 14 fontName "Consolas" @@ -3479,108 +2911,8333 @@ graph borderDistance 6 ] ] - - node + edge + [ + source 5 + target 8 + graphics [ - id 4 - graphics - [ - w 138.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FileSystem class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 5 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FSObject class - Dir class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 4 + target 10 + graphics [ - id 6 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 12 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 15 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 16 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 19 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 21 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 28 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 29 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 30 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 31 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 32 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 24 + target 33 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 38 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 40 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 39 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 41 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 42 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 43 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 24 + target 44 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 46 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 48 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 49 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 50 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 51 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 16 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 18 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 19 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 21 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 23 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 25 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 28 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 29 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 30 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 31 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 32 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 33 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 34 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 35 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 38 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 39 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 40 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 41 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 42 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 43 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 44 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 46 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 48 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 49 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 50 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 51 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 17 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 20 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 22 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 24 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 26 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 27 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 36 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 37 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 45 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 47 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 16 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 30 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 24 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 24 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 45 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 16 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 30 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 47 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 47 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 20 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 21 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 22 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 23 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 24 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 25 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 26 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 27 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 28 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 29 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 30 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 31 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 32 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 33 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 34 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 35 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 36 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 37 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 38 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 39 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 40 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 41 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 42 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 43 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 44 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 45 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 46 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 47 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 48 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 49 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 50 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 51 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 52 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 53 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 54 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 55 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 21 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 28 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 29 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 31 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 36 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 37 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 38 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 40 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 39 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 42 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 43 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 44 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 45 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 46 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 47 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 48 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 49 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 50 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 51 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 21 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 22 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 26 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 28 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 29 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 31 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 36 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 37 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 38 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 39 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 40 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 42 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 43 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 44 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 45 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 46 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 47 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 48 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 49 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 50 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 51 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 16 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 17 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 18 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 19 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 20 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 23 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 24 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 25 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 27 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 30 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 32 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 33 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 34 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 35 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 41 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 36 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 37 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 33 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 32 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 19 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 36 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 37 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 41 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] LabelGraphics [ text " - FSObject class - Dir class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -3592,7 +11249,119 @@ graph node [ - id 7 + id 9 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 graphics [ w 112.2 @@ -3627,7 +11396,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -3662,7 +11431,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -3697,7 +11466,7 @@ graph node [ - id 10 + id 15 graphics [ w 103.4 @@ -3731,8 +11500,165 @@ graph ] edge [ - source 4 - target 6 + source 5 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 graphics [ fill "#000000" @@ -3741,7 +11667,7 @@ graph ] LabelGraphics [ - text "root reference FileSystem" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3751,8 +11677,8 @@ graph ] edge [ - source 0 - target 4 + source 3 + target 9 graphics [ fill "#000000" @@ -3761,7 +11687,7 @@ graph ] LabelGraphics [ - text "filesystems reference Model" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3771,8 +11697,8 @@ graph ] edge [ - source 0 - target 3 + source 3 + target 10 graphics [ fill "#000000" @@ -3781,7 +11707,7 @@ graph ] LabelGraphics [ - text "otherFSObjects reference Model" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3791,17 +11717,16 @@ graph ] edge [ - source 0 + source 7 target 5 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "otherFSObjects reference Model" + text "target reference Transition" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3809,233 +11734,131 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 11 + target 8 + graphics [ - id 0 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - Model class DefinedPart - Model class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 6 + target 9 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FSObject class - File class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 6 + target 5 + graphics [ - id 4 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FSObject class - File class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 11 + target 10 + graphics [ - id 5 - graphics - [ - w 138.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FileSystem class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 6 + id 0 graphics [ - w 123.20000000000002 - h 54 + w 277.20000000000005 + h 82 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4043,7 +11866,7 @@ graph ] LabelGraphics [ - text "null" + text "o 1" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4055,8 +11878,10 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class " fontSize 14 fontName "Consolas" @@ -4068,10 +11893,10 @@ graph node [ - id 7 + id 1 graphics [ - w 112.2 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -4080,7 +11905,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4103,10 +11928,10 @@ graph node [ - id 8 + id 2 graphics [ - w 85.80000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -4115,7 +11940,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4138,11 +11963,11 @@ graph node [ - id 9 + id 3 graphics [ - w 103.4 - h 26 + w 107.80000000000001 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4150,7 +11975,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4162,6 +11987,7 @@ graph LabelGraphics [ text " + Region class " fontSize 14 fontName "Consolas" @@ -4173,11 +11999,11 @@ graph node [ - id 10 + id 4 graphics [ - w 103.4 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4185,7 +12011,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4197,6 +12023,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Entry class " fontSize 14 fontName "Consolas" @@ -4205,96 +12034,14 @@ graph borderDistance 6 ] ] - edge - [ - source 5 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "root reference FileSystem" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "filesystems reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 5 graphics [ - w 192.50000000000003 - h 54 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4302,7 +12049,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4314,8 +12061,9 @@ graph LabelGraphics [ text " - Model class DefinedPart - Model class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -4327,11 +12075,11 @@ graph node [ - id 1 + id 6 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4339,7 +12087,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4351,6 +12099,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -4362,11 +12111,11 @@ graph node [ - id 2 + id 7 graphics [ - w 50.6 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4374,7 +12123,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -4386,6 +12135,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -4397,11 +12149,11 @@ graph node [ - id 3 + id 8 graphics [ - w 138.60000000000002 - h 40 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4421,7 +12173,11 @@ graph LabelGraphics [ text " - FileSystem class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4433,11 +12189,11 @@ graph node [ - id 4 + id 9 graphics [ - w 123.20000000000002 - h 54 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4457,8 +12213,11 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -4470,11 +12229,11 @@ graph node [ - id 5 + id 10 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4494,8 +12253,7 @@ graph LabelGraphics [ text " - FSObject class - File class + Transition class " fontSize 14 fontName "Consolas" @@ -4507,11 +12265,11 @@ graph node [ - id 6 + id 11 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -4531,8 +12289,7 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Transition class " fontSize 14 fontName "Consolas" @@ -4544,7 +12301,7 @@ graph node [ - id 7 + id 12 graphics [ w 112.2 @@ -4579,7 +12336,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -4614,7 +12371,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -4649,7 +12406,7 @@ graph node [ - id 10 + id 15 graphics [ w 103.4 @@ -4682,6 +12439,123 @@ graph ] ] edge + [ + source 8 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge [ source 3 target 4 @@ -4693,7 +12567,7 @@ graph ] LabelGraphics [ - text "root reference FileSystem" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4703,16 +12577,17 @@ graph ] edge [ - source 6 - target 4 + source 3 + target 5 graphics [ fill "#000000" + width 3 targetArrow "standard" ] LabelGraphics [ - text "parent reference FSObject" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4722,8 +12597,8 @@ graph ] edge [ - source 4 - target 6 + source 3 + target 7 graphics [ fill "#000000" @@ -4732,7 +12607,7 @@ graph ] LabelGraphics [ - text "contents reference Dir" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4742,8 +12617,28 @@ graph ] edge [ - source 0 - target 3 + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 graphics [ fill "#000000" @@ -4752,7 +12647,7 @@ graph ] LabelGraphics [ - text "filesystems reference Model" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4762,9 +12657,123 @@ graph ] edge [ - source 0 + source 6 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 target 5 graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics [ fill "#000000" width 3 @@ -4772,7 +12781,7 @@ graph ] LabelGraphics [ - text "otherFSObjects reference Model" + text "regions reference CompositeElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 605b244d..0b9199f4 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png 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 ffc48f68..8136fd72 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,15 @@ - - - - - - - - + + + + + + + + + + + + + + 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 57d704cf..77878c2e 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 @@ -150,8 +150,8 @@ graph id 4 graphics [ - w 107.80000000000001 - h 40 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -171,7 +171,9 @@ graph LabelGraphics [ text " - Region class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -186,7 +188,7 @@ graph id 5 graphics [ - w 154.0 + w 146.3 h 68 type "rectangle" fill "#FFFFFF" @@ -207,9 +209,9 @@ graph LabelGraphics [ text " + Pseudostate class Vertex class - RegularState class - FinalState class + Entry class " fontSize 14 fontName "Consolas" @@ -224,8 +226,8 @@ graph id 6 graphics [ - w 177.10000000000002 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -245,9 +247,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Synchronization class + Transition class " fontSize 14 fontName "Consolas" @@ -261,6 +261,46 @@ graph [ id 7 graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics [ w 112.2 h 26 @@ -294,7 +334,7 @@ graph node [ - id 8 + id 9 graphics [ w 85.80000000000001 @@ -329,7 +369,7 @@ graph node [ - id 9 + id 10 graphics [ w 103.4 @@ -364,7 +404,7 @@ graph node [ - id 10 + id 11 graphics [ w 103.4 @@ -398,8 +438,47 @@ graph ] edge [ - source 4 - target 5 + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 graphics [ fill "#000000" @@ -419,7 +498,7 @@ graph edge [ source 3 - target 6 + target 5 graphics [ fill "#000000" @@ -438,8 +517,8 @@ graph ] edge [ - source 0 - target 3 + source 3 + target 7 graphics [ fill "#000000" @@ -448,7 +527,45 @@ graph ] LabelGraphics [ - text "regions reference CompositeElement" + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -459,7 +576,7 @@ graph edge [ source 0 - target 4 + target 3 graphics [ fill "#000000" @@ -652,7 +769,7 @@ graph text " Pseudostate class Vertex class - Entry class + Exit class " fontSize 14 fontName "Consolas" @@ -667,8 +784,8 @@ graph id 5 graphics [ - w 138.60000000000002 - h 40 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -688,7 +805,9 @@ graph LabelGraphics [ text " - Transition class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -703,8 +822,8 @@ graph id 6 graphics [ - w 292.6 - h 96 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -724,11 +843,9 @@ graph LabelGraphics [ text " + Pseudostate class Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart + Exit class " fontSize 14 fontName "Consolas" @@ -766,7 +883,7 @@ graph text " Pseudostate class Vertex class - Exit class + Entry class " fontSize 14 fontName "Consolas" @@ -781,8 +898,8 @@ graph id 8 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -790,7 +907,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -802,6 +919,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -816,8 +934,8 @@ graph id 9 graphics [ - w 85.80000000000001 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -825,7 +943,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -837,6 +955,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -851,8 +974,8 @@ graph id 10 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -860,7 +983,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -872,6 +995,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -886,8 +1010,8 @@ graph id 11 graphics [ - w 103.4 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -895,7 +1019,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -907,6 +1031,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -915,173 +1044,50 @@ graph borderDistance 6 ] ] - edge - [ - source 7 - target 5 - graphics + + node [ - fill "#000000" - targetArrow "standard" + id 12 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] - LabelGraphics + + node [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 4 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 4 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 + id 13 graphics [ - w 277.20000000000005 - h 82 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1089,7 +1095,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1101,10 +1107,11 @@ graph LabelGraphics [ text " - Statechart class DefinedPart - CompositeElement class DefinedPart - Statechart class + Vertex class + State class + RegularState class CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1116,11 +1123,11 @@ graph node [ - id 1 + id 14 graphics [ - w 41.800000000000004 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1128,7 +1135,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1140,6 +1147,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1151,11 +1163,11 @@ graph node [ - id 2 + id 15 graphics [ - w 50.6 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1163,7 +1175,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1175,6 +1187,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1186,10 +1199,10 @@ graph node [ - id 3 + id 16 graphics [ - w 107.80000000000001 + w 138.60000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -1210,7 +1223,7 @@ graph LabelGraphics [ text " - Region class + Transition class " fontSize 14 fontName "Consolas" @@ -1222,11 +1235,11 @@ graph node [ - id 4 + id 17 graphics [ - w 154.0 - h 68 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1247,8 +1260,10 @@ graph [ text " Vertex class + State class RegularState class - FinalState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1260,11 +1275,11 @@ graph node [ - id 5 + id 18 graphics [ - w 146.3 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1284,9 +1299,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Entry class + Transition class " fontSize 14 fontName "Consolas" @@ -1298,11 +1311,11 @@ graph node [ - id 6 + id 19 graphics [ - w 292.6 - h 96 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1322,11 +1335,7 @@ graph LabelGraphics [ text " - Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart + Transition class " fontSize 14 fontName "Consolas" @@ -1338,11 +1347,11 @@ graph node [ - id 7 + id 20 graphics [ - w 138.60000000000002 - h 40 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1362,7 +1371,11 @@ graph LabelGraphics [ text " - Transition class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1374,11 +1387,11 @@ graph node [ - id 8 + id 21 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1386,7 +1399,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1398,6 +1411,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1409,11 +1423,11 @@ graph node [ - id 9 + id 22 graphics [ - w 85.80000000000001 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1421,7 +1435,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1433,6 +1447,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -1444,11 +1461,11 @@ graph node [ - id 10 + id 23 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1456,7 +1473,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1468,6 +1485,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -1479,11 +1497,11 @@ graph node [ - id 11 + id 24 graphics [ - w 103.4 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1491,7 +1509,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1503,6 +1521,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -1511,173 +1532,14 @@ graph borderDistance 6 ] ] - edge - [ - source 4 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 4 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 25 graphics [ - w 277.20000000000005 - h 82 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1685,7 +1547,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1697,10 +1559,7 @@ graph LabelGraphics [ text " - Statechart class DefinedPart - CompositeElement class DefinedPart - Statechart class - CompositeElement class + Transition class " fontSize 14 fontName "Consolas" @@ -1712,11 +1571,11 @@ graph node [ - id 1 + id 26 graphics [ - w 41.800000000000004 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1724,7 +1583,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1736,6 +1595,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -1747,11 +1611,11 @@ graph node [ - id 2 + id 27 graphics [ - w 50.6 - h 26 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1759,7 +1623,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1771,6 +1635,9 @@ graph LabelGraphics [ text " + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -1782,10 +1649,10 @@ graph node [ - id 3 + id 28 graphics [ - w 107.80000000000001 + w 138.60000000000002 h 40 type "rectangle" fill "#FFFFFF" @@ -1806,7 +1673,7 @@ graph LabelGraphics [ text " - Region class + Transition class " fontSize 14 fontName "Consolas" @@ -1818,11 +1685,11 @@ graph node [ - id 4 + id 29 graphics [ - w 146.3 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1842,9 +1709,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Exit class + Transition class " fontSize 14 fontName "Consolas" @@ -1856,11 +1721,11 @@ graph node [ - id 5 + id 30 graphics [ - w 146.3 - h 68 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1880,9 +1745,7 @@ graph LabelGraphics [ text " - Pseudostate class - Vertex class - Entry class + Transition class " fontSize 14 fontName "Consolas" @@ -1894,11 +1757,11 @@ graph node [ - id 6 + id 31 graphics [ - w 292.6 - h 96 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1918,11 +1781,7 @@ graph LabelGraphics [ text " - Vertex class - State class - RegularState class - CompositeElement class - CompositeElement class UndefinedPart + Transition class " fontSize 14 fontName "Consolas" @@ -1934,7 +1793,7 @@ graph node [ - id 7 + id 32 graphics [ w 138.60000000000002 @@ -1970,11 +1829,11 @@ graph node [ - id 8 + id 33 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -1982,7 +1841,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -1994,6 +1853,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2005,11 +1865,11 @@ graph node [ - id 9 + id 34 graphics [ - w 85.80000000000001 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2017,7 +1877,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2029,6 +1889,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2040,11 +1901,11 @@ graph node [ - id 10 + id 35 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2052,7 +1913,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2064,6 +1925,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2075,11 +1937,11 @@ graph node [ - id 11 + id 36 graphics [ - w 103.4 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2087,7 +1949,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2099,6 +1961,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -2107,173 +1972,14 @@ graph borderDistance 6 ] ] - edge - [ - source 4 - target 7 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "incomingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 5 - target 7 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "outgoingTransitions reference Vertex" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 3 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "vertices reference Region" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 4 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "target reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 7 - target 5 - graphics - [ - fill "#000000" - targetArrow "standard" - ] - LabelGraphics - [ - text "source reference Transition" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "regions reference CompositeElement" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 37 graphics [ - w 192.50000000000003 - h 54 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2281,7 +1987,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2293,8 +1999,9 @@ graph LabelGraphics [ text " - Model class DefinedPart - Model class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -2306,11 +2013,11 @@ graph node [ - id 1 + id 38 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2318,7 +2025,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2330,6 +2037,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2341,11 +2049,11 @@ graph node [ - id 2 + id 39 graphics [ - w 50.6 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2353,7 +2061,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2365,6 +2073,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2376,11 +2085,11 @@ graph node [ - id 3 + id 40 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2400,8 +2109,7 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Transition class " fontSize 14 fontName "Consolas" @@ -2413,7 +2121,7 @@ graph node [ - id 4 + id 41 graphics [ w 138.60000000000002 @@ -2437,7 +2145,7 @@ graph LabelGraphics [ text " - FileSystem class + Transition class " fontSize 14 fontName "Consolas" @@ -2449,11 +2157,11 @@ graph node [ - id 5 + id 42 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2473,8 +2181,7 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Transition class " fontSize 14 fontName "Consolas" @@ -2486,11 +2193,11 @@ graph node [ - id 6 + id 43 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2510,8 +2217,7 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Transition class " fontSize 14 fontName "Consolas" @@ -2523,11 +2229,11 @@ graph node [ - id 7 + id 44 graphics [ - w 112.2 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2535,7 +2241,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2547,6 +2253,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2558,11 +2265,11 @@ graph node [ - id 8 + id 45 graphics [ - w 85.80000000000001 - h 26 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2570,7 +2277,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2582,6 +2289,9 @@ graph LabelGraphics [ text " + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -2593,11 +2303,11 @@ graph node [ - id 9 + id 46 graphics [ - w 103.4 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2605,7 +2315,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2617,6 +2327,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -2628,11 +2339,11 @@ graph node [ - id 10 + id 47 graphics [ - w 103.4 - h 26 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2640,196 +2351,7 @@ graph ] LabelGraphics [ - text "New Objects" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - edge - [ - source 4 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "root reference FileSystem" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "filesystems reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ - node - [ - id 0 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - Model class DefinedPart - Model class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] - ] - - node - [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -2841,6 +2363,11 @@ graph LabelGraphics [ text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -2852,11 +2379,11 @@ graph node [ - id 3 + id 48 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2876,8 +2403,7 @@ graph LabelGraphics [ text " - FSObject class - File class + Transition class " fontSize 14 fontName "Consolas" @@ -2889,7 +2415,7 @@ graph node [ - id 4 + id 49 graphics [ w 138.60000000000002 @@ -2913,7 +2439,7 @@ graph LabelGraphics [ text " - FileSystem class + Transition class " fontSize 14 fontName "Consolas" @@ -2925,11 +2451,11 @@ graph node [ - id 5 + id 50 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2949,8 +2475,7 @@ graph LabelGraphics [ text " - FSObject class - File class + Transition class " fontSize 14 fontName "Consolas" @@ -2962,11 +2487,11 @@ graph node [ - id 6 + id 51 graphics [ - w 123.20000000000002 - h 54 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -2986,8 +2511,9 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -2999,7 +2525,7 @@ graph node [ - id 7 + id 52 graphics [ w 112.2 @@ -3034,7 +2560,7 @@ graph node [ - id 8 + id 53 graphics [ w 85.80000000000001 @@ -3069,7 +2595,7 @@ graph node [ - id 9 + id 54 graphics [ w 103.4 @@ -3104,7 +2630,7 @@ graph node [ - id 10 + id 55 graphics [ w 103.4 @@ -3138,17 +2664,16 @@ graph ] edge [ - source 4 - target 6 + source 5 + target 8 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "root reference FileSystem" + text "incomingTransitions reference Vertex" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3158,17 +2683,16 @@ graph ] edge [ - source 0 - target 4 + source 4 + target 10 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "filesystems reference Model" + text "incomingTransitions reference Vertex" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3178,17 +2702,16 @@ graph ] edge [ - source 0 - target 3 + source 11 + target 12 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "otherFSObjects reference Model" + text "incomingTransitions reference Vertex" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3198,17 +2721,16 @@ graph ] edge [ - source 0 - target 5 + source 11 + target 15 graphics [ fill "#000000" - width 3 targetArrow "standard" ] LabelGraphics [ - text "otherFSObjects reference Model" + text "incomingTransitions reference Vertex" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -3216,233 +2738,8768 @@ graph position "thead" ] ] -] -graph -[ - node + edge + [ + source 11 + target 18 + graphics [ - id 0 - graphics - [ - w 192.50000000000003 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "o 1" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - Model class DefinedPart - Model class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 16 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 19 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 21 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 28 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 29 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 30 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 31 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 32 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 24 + target 33 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 38 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 40 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 39 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 41 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 42 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 27 + target 43 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 24 + target 44 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 46 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 48 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 49 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 50 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 16 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 18 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 19 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 21 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 23 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 25 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 28 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 29 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 30 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 31 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 32 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 33 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 34 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 35 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 38 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 39 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 40 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 41 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 42 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 43 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 44 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 46 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 48 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 14 + target 49 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 50 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 17 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 20 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 22 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 24 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 26 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 27 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 36 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 37 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 45 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 47 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 51 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 16 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 30 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 24 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 27 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 24 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 45 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 12 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 15 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 16 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 30 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 14 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 47 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 16 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 17 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 18 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 19 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 20 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 21 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 22 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 23 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 24 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 25 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 26 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 27 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 28 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 29 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 30 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 31 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 32 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 33 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 34 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 35 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 36 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 37 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 38 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 39 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 40 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 41 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 42 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 43 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 44 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 45 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 46 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 47 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 48 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 49 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 50 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 51 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 52 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 53 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 54 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 55 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 13 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 21 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 22 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 26 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 17 + target 28 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 29 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 18 + target 31 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 36 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 34 + target 37 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 38 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 40 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 39 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 42 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 32 + target 43 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 44 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 19 + target 45 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 46 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 47 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 48 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 49 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 50 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 33 + target 51 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 13 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 21 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 22 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 26 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 28 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 29 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 31 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 36 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 37 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 38 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 39 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 23 + target 40 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 42 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 43 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 25 + target 44 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 45 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 46 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 47 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 20 + target 48 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 49 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 35 + target 50 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 41 + target 51 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 12 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 14 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 15 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 16 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 17 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 18 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 19 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 20 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 23 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 24 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 25 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 27 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 30 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 32 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 33 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 34 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 35 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 41 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 17 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 18 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 36 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 37 + target 34 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 33 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 32 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 19 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 33 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 13 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 21 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 22 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 26 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 28 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 29 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 31 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 36 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 37 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 38 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 39 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 40 + target 23 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 42 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 43 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 44 + target 25 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 45 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 46 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 47 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 48 + target 20 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 49 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 50 + target 35 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 51 + target 41 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 154.0 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + RegularState class + FinalState class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 6 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 5 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ + node + [ + id 0 + graphics + [ + w 277.20000000000005 + h 82 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "o 1" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 1 + graphics + [ + w 41.800000000000004 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "true" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 2 + graphics + [ + w 50.6 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "false" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 3 + graphics + [ + w 107.80000000000001 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Region class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 4 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 5 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 6 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 7 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 8 + graphics + [ + w 292.6 + h 96 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 9 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Exit class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 10 + graphics + [ + w 146.3 + h 68 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Pseudostate class + Vertex class + Entry class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 11 + graphics + [ + w 138.60000000000002 + h 40 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "null" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + Transition class + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 12 + graphics + [ + w 112.2 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Integers" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 13 + graphics + [ + w 85.80000000000001 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Reals" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + + node + [ + id 14 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Strings" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] ] node [ - id 1 - graphics - [ - w 41.800000000000004 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "true" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + id 15 + graphics + [ + w 103.4 + h 26 + type "rectangle" + fill "#FFFFFF" + fill2 "#FFFFFF" + outline "#000000" + ] + LabelGraphics + [ + text "New Objects" + outline "#000000" + fill "#FFFFFF" + fontSize 16 + fontName "Monospace" + autoSizePolicy "node_width" + anchor "t" + borderDistance 0.0 + ] + LabelGraphics + [ + text " + " + fontSize 14 + fontName "Consolas" + alignment "left" + anchor "tl" + borderDistance 6 + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 11 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 5 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 11 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 4 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 3 + target 5 + graphics [ - id 2 - graphics - [ - w 50.6 - h 26 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "false" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + width 3 + targetArrow "standard" ] - - node + LabelGraphics [ - id 3 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FSObject class - File class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 11 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 7 + target 5 + graphics + [ + fill "#000000" + targetArrow "standard" ] - - node + LabelGraphics [ - id 4 - graphics - [ - w 138.60000000000002 - h 40 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FileSystem class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" ] - - node + ] + edge + [ + source 11 + target 10 + graphics [ - id 5 - graphics - [ - w 123.20000000000002 - h 54 - type "rectangle" - fill "#FFFFFF" - fill2 "#FFFFFF" - outline "#000000" - ] - LabelGraphics - [ - text "null" - outline "#000000" - fill "#FFFFFF" - fontSize 16 - fontName "Monospace" - autoSizePolicy "node_width" - anchor "t" - borderDistance 0.0 - ] - LabelGraphics - [ - text " - FSObject class - Dir class - " - fontSize 14 - fontName "Consolas" - alignment "left" - anchor "tl" - borderDistance 6 - ] + fill "#000000" + targetArrow "standard" ] - + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 0 + target 3 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "regions reference CompositeElement" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] +] +graph +[ node [ - id 6 + id 0 graphics [ - w 123.20000000000002 - h 54 + w 277.20000000000005 + h 82 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3450,7 +11507,7 @@ graph ] LabelGraphics [ - text "null" + text "o 1" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3462,8 +11519,10 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Statechart class DefinedPart + CompositeElement class DefinedPart + Statechart class + CompositeElement class " fontSize 14 fontName "Consolas" @@ -3475,10 +11534,10 @@ graph node [ - id 7 + id 1 graphics [ - w 112.2 + w 41.800000000000004 h 26 type "rectangle" fill "#FFFFFF" @@ -3487,7 +11546,7 @@ graph ] LabelGraphics [ - text "New Integers" + text "true" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3510,10 +11569,10 @@ graph node [ - id 8 + id 2 graphics [ - w 85.80000000000001 + w 50.6 h 26 type "rectangle" fill "#FFFFFF" @@ -3522,7 +11581,7 @@ graph ] LabelGraphics [ - text "New Reals" + text "false" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3545,11 +11604,11 @@ graph node [ - id 9 + id 3 graphics [ - w 103.4 - h 26 + w 107.80000000000001 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3557,7 +11616,7 @@ graph ] LabelGraphics [ - text "New Strings" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3569,6 +11628,7 @@ graph LabelGraphics [ text " + Region class " fontSize 14 fontName "Consolas" @@ -3580,11 +11640,11 @@ graph node [ - id 10 + id 4 graphics [ - w 103.4 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3592,7 +11652,7 @@ graph ] LabelGraphics [ - text "New Objects" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3604,6 +11664,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Entry class " fontSize 14 fontName "Consolas" @@ -3612,96 +11675,14 @@ graph borderDistance 6 ] ] - edge - [ - source 4 - target 6 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "root reference FileSystem" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 4 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "filesystems reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 3 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] - edge - [ - source 0 - target 5 - graphics - [ - fill "#000000" - width 3 - targetArrow "standard" - ] - LabelGraphics - [ - text "otherFSObjects reference Model" - fontSize 14 - fontName "Consolas" - configuration "AutoFlippingLabel" - model "six_pos" - position "thead" - ] - ] -] -graph -[ + node [ - id 0 + id 5 graphics [ - w 192.50000000000003 - h 54 + w 154.0 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3709,7 +11690,7 @@ graph ] LabelGraphics [ - text "o 1" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3721,8 +11702,9 @@ graph LabelGraphics [ text " - Model class DefinedPart - Model class + Vertex class + RegularState class + FinalState class " fontSize 14 fontName "Consolas" @@ -3734,11 +11716,11 @@ graph node [ - id 1 + id 6 graphics [ - w 41.800000000000004 - h 26 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3746,7 +11728,7 @@ graph ] LabelGraphics [ - text "true" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3758,6 +11740,7 @@ graph LabelGraphics [ text " + Transition class " fontSize 14 fontName "Consolas" @@ -3769,11 +11752,11 @@ graph node [ - id 2 + id 7 graphics [ - w 50.6 - h 26 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3781,7 +11764,7 @@ graph ] LabelGraphics [ - text "false" + text "null" outline "#000000" fill "#FFFFFF" fontSize 16 @@ -3793,6 +11776,9 @@ graph LabelGraphics [ text " + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -3804,11 +11790,11 @@ graph node [ - id 3 + id 8 graphics [ - w 138.60000000000002 - h 40 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3828,7 +11814,11 @@ graph LabelGraphics [ text " - FileSystem class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -3840,11 +11830,11 @@ graph node [ - id 4 + id 9 graphics [ - w 123.20000000000002 - h 54 + w 292.6 + h 96 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3864,8 +11854,11 @@ graph LabelGraphics [ text " - FSObject class - Dir class + Vertex class + State class + RegularState class + CompositeElement class + CompositeElement class UndefinedPart " fontSize 14 fontName "Consolas" @@ -3877,11 +11870,11 @@ graph node [ - id 5 + id 10 graphics [ - w 123.20000000000002 - h 54 + w 138.60000000000002 + h 40 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3901,8 +11894,7 @@ graph LabelGraphics [ text " - FSObject class - File class + Transition class " fontSize 14 fontName "Consolas" @@ -3914,11 +11906,11 @@ graph node [ - id 6 + id 11 graphics [ - w 123.20000000000002 - h 54 + w 146.3 + h 68 type "rectangle" fill "#FFFFFF" fill2 "#FFFFFF" @@ -3938,8 +11930,9 @@ graph LabelGraphics [ text " - FSObject class - File class + Pseudostate class + Vertex class + Exit class " fontSize 14 fontName "Consolas" @@ -3951,7 +11944,7 @@ graph node [ - id 7 + id 12 graphics [ w 112.2 @@ -3986,7 +11979,7 @@ graph node [ - id 8 + id 13 graphics [ w 85.80000000000001 @@ -4021,7 +12014,7 @@ graph node [ - id 9 + id 14 graphics [ w 103.4 @@ -4056,7 +12049,7 @@ graph node [ - id 10 + id 15 graphics [ w 103.4 @@ -4089,6 +12082,84 @@ graph ] ] edge + [ + source 8 + target 6 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 9 + target 10 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "incomingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 4 + target 6 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 8 + target 10 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "outgoingTransitions reference Vertex" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge [ source 3 target 4 @@ -4100,7 +12171,7 @@ graph ] LabelGraphics [ - text "root reference FileSystem" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4110,8 +12181,8 @@ graph ] edge [ - source 0 - target 3 + source 3 + target 5 graphics [ fill "#000000" @@ -4120,7 +12191,7 @@ graph ] LabelGraphics [ - text "filesystems reference Model" + text "vertices reference Region" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4130,8 +12201,68 @@ graph ] edge [ - source 0 - target 5 + source 3 + target 7 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 8 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 9 + graphics + [ + fill "#000000" + width 3 + targetArrow "standard" + ] + LabelGraphics + [ + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 3 + target 11 graphics [ fill "#000000" @@ -4140,7 +12271,83 @@ graph ] LabelGraphics [ - text "otherFSObjects reference Model" + text "vertices reference Region" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 9 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "target reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 6 + target 4 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" + fontSize 14 + fontName "Consolas" + configuration "AutoFlippingLabel" + model "six_pos" + position "thead" + ] + ] + edge + [ + source 10 + target 8 + graphics + [ + fill "#000000" + targetArrow "standard" + ] + LabelGraphics + [ + text "source reference Transition" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" @@ -4151,7 +12358,7 @@ graph edge [ source 0 - target 6 + target 3 graphics [ fill "#000000" @@ -4160,7 +12367,7 @@ graph ] LabelGraphics [ - text "otherFSObjects reference Model" + text "regions reference CompositeElement" fontSize 14 fontName "Consolas" configuration "AutoFlippingLabel" 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 1fddfd99..08502c12 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png and b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png 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 6b9900e2..f61f6ffb 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,8 +1,15 @@ - - - - - - - + + + + + + + + + + + + + + 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 d1c8d98d..9e25c13a 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,22 +1,18 @@ Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;335;2777;2544;7194393100;105;140;61;186;9;0;3 +1;1;ModelResultImpl;58;4042;5037;7589962200;537;880;485;48;20;0;6 Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;120;2483;7934;1838851300;477;3162;36;100;0;2 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;InconsistencyResultImpl;20;2258;2771;12900;42;12;1;0;0 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;InconsistencyResultImpl;14;2066;3146;29000;439;14;13;0;0 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;15;1857;2520;3998461000;169;207;102;9;4;0;3 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;70;2695;2815;3409332300;111;133;61;18;3;0;5 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;16;2246;2987;3347793300;168;362;201;7;6;0;3 +1;1;ModelResultImpl;35;3137;3383;1446909200;48;0;24;0;0;2 Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;6;839;711;3017372100;45;206;107;9;7;0;1 +1;1;ModelResultImpl;24;2684;30969;24516501600;27279;28245;26662;18;324;0;4 Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;5;879;674;2970538700;33;111;55;7;2;0;1 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;5;882;742;2902370500;64;203;110;9;6;0;1 -Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime -1;1;ModelResultImpl;10;1041;730;3174826600;23;31;19;12;0;0;1 +1;1;ModelResultImpl;23;2143;23882;16188039300;21183;21191;20297;20;189;0;3 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;InsuficientResourcesResultImpl;18;2211;10998;6300;7933;10;95;0;0 +Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime +1;1;InsuficientResourcesResultImpl;15;2037;5137;6800;2250;15;169;0;0 +Task;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 +1;1;ModelResultImpl;104;2832;6950;15113591900;777;1074;1256;1824;2107;1521;145;44;0;16 +Task;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 +1;1;ModelResultImpl;42;3179;15266;13359431300;12045;12060;12077;12082;12107;9023;25;176;0;9 +Task;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 +1;1;ModelResultImpl;646;4720;6290;14663107900;900;1000;1126;1525;1621;1177;235;34;0;17 diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml index a09e1cf4..7e10c75a 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml @@ -17,17 +17,12 @@ - - - + + - - - - @@ -134,12 +129,6 @@ - - - - - - diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql index 9af35b50..a4718150 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql @@ -14,13 +14,13 @@ pattern loopInInheritence(a: EClass) { pattern opposite(a:EReference, b: EReference) { EReference.eOpposite(a,b); } -@Constraint(key={a}, severity="error", message="error") -pattern oppositeDifferentClass(a:EReference) { - EReference.eOpposite(a,b); - EReference.eContainingClass(a,aContaining); - EReference.eType(b,bTarget); - aContaining != bTarget; -} +//@Constraint(key={a}, severity="error", message="error") +//pattern oppositeDifferentClass(a:EReference) { +// EReference.eOpposite(a,b); +// EReference.eContainingClass(a,aContaining); +// EReference.eType(b,bTarget); +// aContaining != bTarget; +//} @Constraint(key={a}, severity="error", message="error") pattern nonSymmetricOpposite(a:EReference, b:EReference) { diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 deleted file mode 100644 index 02d34dcd..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql +++ /dev/null @@ -1,103 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries - -import "FamMetamodel" - -@Constraint(message="terminatorAndInformation", severity="error", key={T}) -pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { - FunctionalOutput.outgoingLinks(Out,I); - FunctionalOutput.terminator(Out,T); -} or { - InformationLink.to(I,In); - FunctionalInput.terminator(In,T); -} - -@QueryBasedFeature -pattern type(This : Function, Target : FunctionType) = { - find rootElements(_Model, This); - Target == FunctionType::Root; -} or { - neg find parent(_Child, This); - neg find rootElements(_Model, This); - Target == FunctionType::Leaf; -} or { - find parent(This, _Par); - find parent(_Child, This); - Target == FunctionType::Intermediate; -} - -pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = { - FunctionalArchitectureModel.rootElements(Model, Root); -} - -pattern parent(Func : Function, Par : Function) = { - Function.parent(Func, Par); -} - -@QueryBasedFeature -pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) { - FunctionalElement(This); - FunctionalArchitectureModel(Target); -} - -/* -@Constraint(message="noRoot", severity="error", key={fam}) -pattern noRoot(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasRoot(_); -} -@Constraint(message="noIntermediate", severity="error", key={fam}) -pattern noInt(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasInt(_); -} -@Constraint(message="noLeaf", severity="error", key={fam}) -pattern noLeaf(fam: FunctionalArchitectureModel) { - FunctionalArchitectureModel(fam); - neg find hasLeaf(_); -} -*/ - -/* -@QueryBasedFeature -pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = { - find parent+(This, Parent); - find rootElements(Target, Parent); -} or { - find rootElements(Target, This); -} - -pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = { - FunctionalInterface.data(FI, FD); -} - -@QueryBasedFeature -pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = { - find interfaceData(This, Target); -} - -@QueryBasedFeature -pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = { - find interfaceData(This, Target); -} - -@QueryBasedFeature -pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = { - FunctionalElement.interface.outputs(This, Output); - InformationLink.from(Target, Output); -} - -@QueryBasedFeature -pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = { - FunctionalElement.interface.inputs(This, Input); - InformationLink.to(Target, Input); -} - -@QueryBasedFeature -pattern connects(This : FunctionalElement, Target : FunctionalElement) = { - FunctionalElement.outgoingLinks(This,Link); - FunctionalElement.incomingLinks(Target,Link); -}*/ - -/*pattern frequency(a: Function, b : EInt) { - Function.minimumFrequency(a,b); -}*/ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famSPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famSPatterns.vql new file mode 100644 index 00000000..307b0f9c --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famSPatterns.vql @@ -0,0 +1,13 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries + +//import epackage "http://www.inf.mit.bme.hu/viatrasolver/example/fam" +import epackage "FamMetamodel" + +@Constraint(message="terminatorAndInformation", severity="error", key={T}) +pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { + FunctionalOutput.outgoingLinks(Out,I); + FunctionalOutput.terminator(Out,T); +} or { + InformationLink.to(I,In); + FunctionalInput.terminator(In,T); +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famXPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famXPatterns.vql new file mode 100644 index 00000000..153fec91 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famXPatterns.vql @@ -0,0 +1,103 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries + +import epackage "http://www.inf.mit.bme.hu/viatrasolver/example/fam" + +@Constraint(message="terminatorAndInformation", severity="error", key={T}) +pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = { + FunctionalOutput.outgoingLinks(Out,I); + FunctionalOutput.terminator(Out,T); +} or { + InformationLink.to(I,In); + FunctionalInput.terminator(In,T); +} + +@QueryBasedFeature +pattern type(This : Function, Target : FunctionType) = { + find rootElements(_Model, This); + Target == FunctionType::Root; +} or { + neg find parent(_Child, This); + neg find rootElements(_Model, This); + Target == FunctionType::Leaf; +} or { + find parent(This, _Par); + find parent(_Child, This); + Target == FunctionType::Intermediate; +} + +pattern rootElements(Model: FunctionalArchitectureModel, Root : Function) = { + FunctionalArchitectureModel.rootElements(Model, Root); +} + +pattern parent(Func : Function, Par : Function) = { + Function.parent(Func, Par); +} + +@QueryBasedFeature +pattern model(This:FunctionalElement, Target: FunctionalArchitectureModel) { + FunctionalElement(This); + FunctionalArchitectureModel(Target); +} + +/* +@Constraint(message="noRoot", severity="error", key={fam}) +pattern noRoot(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasRoot(_); +} +@Constraint(message="noIntermediate", severity="error", key={fam}) +pattern noInt(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasInt(_); +} +@Constraint(message="noLeaf", severity="error", key={fam}) +pattern noLeaf(fam: FunctionalArchitectureModel) { + FunctionalArchitectureModel(fam); + neg find hasLeaf(_); +} +*/ + +/* +@QueryBasedFeature +pattern model(This : FunctionalElement, Target : FunctionalArchitectureModel) = { + find parent+(This, Parent); + find rootElements(Target, Parent); +} or { + find rootElements(Target, This); +} + +pattern interfaceData(FI : FunctionalInterface, FD : FunctionalData) = { + FunctionalInterface.data(FI, FD); +} + +@QueryBasedFeature +pattern inputs(This : FunctionalInterface, Target : FunctionalInput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outputs(This : FunctionalInterface, Target : FunctionalOutput) = { + find interfaceData(This, Target); +} + +@QueryBasedFeature +pattern outgoingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.outputs(This, Output); + InformationLink.from(Target, Output); +} + +@QueryBasedFeature +pattern incomingLinks(This : FunctionalElement, Target : InformationLink) = { + FunctionalElement.interface.inputs(This, Input); + InformationLink.to(Target, Input); +} + +@QueryBasedFeature +pattern connects(This : FunctionalElement, Target : FunctionalElement) = { + FunctionalElement.outgoingLinks(This,Link); + FunctionalElement.incomingLinks(Target,Link); +}*/ + +/*pattern frequency(a: Function, b : EInt) { + Function.minimumFrequency(a,b); +}*/ 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 index 69a6b9f4..1d3019e8 100644 --- 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 @@ -1,5 +1,5 @@ /** - * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql + * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famSPatterns.vql */ package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries; 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 index 96fd178f..a0ebcd7a 100644 --- 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 @@ -156,3 +156,27 @@ /Transition_M3.java /Transition_M4.java /YakinduMutatedPatterns.java +/Child.java +/ChoiceHasNoIncoming.java +/ChoiceHasNoOutgoing.java +/EntryInRegion.java +/HasMultipleIncomingTrainsition.java +/HasMultipleOutgoingTrainsition.java +/HasMultipleRegions.java +/IncomingToEntry.java +/MultipleTransitionFromEntry.java +/NoEntryInRegion.java +/NoOutgoingTransitionFromEntry.java +/NoStateInRegion.java +/NotSynchronizingStates.java +/OutgoingFromExit.java +/OutgoingFromFinal.java +/StateInRegion.java +/SynchHasNoIncoming.java +/SynchHasNoOutgoing.java +/SynchThree.java +/SynchronizedIncomingInSameRegion.java +/SynchronizedRegionDoesNotHaveMultipleRegions.java +/SynchronizedRegionsAreNotSiblings.java +/Transition.java +/TwoSynch.java diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/TestExecutionICSE.xtend b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/TestExecutionICSE.xtend new file mode 100644 index 00000000..41bb763d --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/TestExecutionICSE.xtend @@ -0,0 +1,22 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test + +import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor + +class TestExecutionICSE { + def static void main(String[] args) { + val fileSystemPath = "configs/fileSystem.vsconfig"; + val ecorePath = "configs/ecore.vsconfig"; + val yakinduPath = "configs/yakindu.vsconfig"; + val famPath = "configs/fam.vsconfig"; +// val yakinduWithWFPath = "configs/yakinduWF.vsconfig"; +// val famWithWFPath = "configs/famWF.vsconfig"; + val exp1 = StandaloneScriptExecutor.executeScript(fileSystemPath); + println(exp1) +// val exp2 = StandaloneScriptExecutor.executeScript(ecorePath); +// println(exp2) + val exp3 = StandaloneScriptExecutor.executeScript(yakinduPath); + println(exp3) + val exp4 = StandaloneScriptExecutor.executeScript(famPath); + println(exp4) + } +} \ No newline at end of file diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java index c1c75043..d8ca61ea 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/FileSystem.java @@ -62,7 +62,6 @@ public interface FileSystem extends EObject { * @return the value of the 'Live' reference list. * @see ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage#getFileSystem_Live() * @model transient="true" changeable="false" volatile="true" derived="true" - * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='hu.bme.mit.inf.dslreasoner.domains.alloyexamples.live'" * @generated */ EList getLive(); diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java index 8bbc6a74..b5ef2b66 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/FileSystemImpl.java @@ -13,7 +13,6 @@ import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; @@ -44,16 +43,6 @@ public class FileSystemImpl extends MinimalEObjectImpl.Container implements File */ protected Dir root; - /** - * The cached setting delegate for the '{@link #getLive() Live}' reference list. - * - * - * @see #getLive() - * @generated - * @ordered - */ - protected EStructuralFeature.Internal.SettingDelegate LIVE__ESETTING_DELEGATE = ((EStructuralFeature.Internal)filesystemPackage.Literals.FILE_SYSTEM__LIVE).getSettingDelegate(); - /** * * @@ -123,7 +112,11 @@ public class FileSystemImpl extends MinimalEObjectImpl.Container implements File */ @SuppressWarnings("unchecked") public EList getLive() { - return (EList)LIVE__ESETTING_DELEGATE.dynamicGet(this, null, 0, true, false); + // TODO: implement this method to return the 'Live' reference list + // Ensure that you remove @generated or mark it @generated NOT + // The list is expected to implement org.eclipse.emf.ecore.util.InternalEList and org.eclipse.emf.ecore.EStructuralFeature.Setting + // so it's likely that an appropriate subclass of org.eclipse.emf.ecore.util.EcoreEList should be used. + throw new UnsupportedOperationException(); } /** @@ -197,7 +190,7 @@ public class FileSystemImpl extends MinimalEObjectImpl.Container implements File case filesystemPackage.FILE_SYSTEM__ROOT: return root != null; case filesystemPackage.FILE_SYSTEM__LIVE: - return LIVE__ESETTING_DELEGATE.dynamicIsSet(this, null, 0); + return !getLive().isEmpty(); } return super.eIsSet(featureID); } diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java index 5c6dd21e..5bd41020 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/impl/filesystemPackageImpl.java @@ -317,8 +317,6 @@ public class filesystemPackageImpl extends EPackageImpl implements filesystemPac // Create annotations // http://www.eclipse.org/emf/2002/Ecore createEcoreAnnotations(); - // org.eclipse.viatra.query.querybasedfeature - createOrgAnnotations(); } /** @@ -337,20 +335,4 @@ public class filesystemPackageImpl extends EPackageImpl implements filesystemPac }); } - /** - * Initializes the annotations for org.eclipse.viatra.query.querybasedfeature. - * - * - * @generated - */ - protected void createOrgAnnotations() { - String source = "org.eclipse.viatra.query.querybasedfeature"; - addAnnotation - (getFileSystem_Live(), - source, - new String[] { - "patternFQN", "hu.bme.mit.inf.dslreasoner.domains.alloyexamples.live" - }); - } - } //filesystemPackageImpl -- cgit v1.2.3-54-g00ecf From f1f2a1fac60aa00aa21cf9165e34666c108e8e4b Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Sun, 12 May 2019 22:27:13 -0400 Subject: Pre-realisticBranchCreation Commit --- .../.ApplicationConfigurationIdeModule.xtendbin | Bin 1701 -> 1701 bytes .../ide/.ApplicationConfigurationIdeSetup.xtendbin | Bin 2526 -> 2526 bytes .../ide/.VampireLanguageIdeModule.xtendbin | Bin 1685 -> 1685 bytes .../ide/.VampireLanguageIdeSetup.xtendbin | Bin 2500 -> 2500 bytes .../ui/.VampireLanguageUiModule.xtendbin | Bin 2342 -> 2342 bytes .../.VampireLanguageProposalProvider.xtendbin | Bin 1792 -> 1792 bytes ...ampireLanguageDescriptionLabelProvider.xtendbin | Bin 1965 -> 1965 bytes .../.VampireLanguageLabelProvider.xtendbin | Bin 2405 -> 2405 bytes .../.VampireLanguageOutlineTreeProvider.xtendbin | Bin 1819 -> 1819 bytes .../.VampireLanguageQuickfixProvider.xtendbin | Bin 1786 -> 1786 bytes .../.VampireLanguageRuntimeModule.xtendbin | Bin 1706 -> 1706 bytes .../.VampireLanguageStandaloneSetup.xtendbin | Bin 1980 -> 1980 bytes .../formatting2/.VampireLanguageFormatter.xtendbin | Bin 4130 -> 4130 bytes .../generator/.VampireLanguageGenerator.xtendbin | Bin 2338 -> 2338 bytes .../scoping/.VampireLanguageScopeProvider.xtendbin | Bin 1751 -> 1751 bytes .../validation/.VampireLanguageValidator.xtendbin | Bin 1736 -> 1736 bytes .../.VampireAnalyzerConfiguration.xtendbin | Bin 2691 -> 2691 bytes .../vampire/reasoner/.VampireSolver.xtendbin | Bin 5892 -> 5892 bytes .../builder/.Logic2VampireLanguageMapper.xtendbin | Bin 18150 -> 18149 bytes .../.Logic2VampireLanguageMapperTrace.xtendbin | Bin 4656 -> 4656 bytes ...c2VampireLanguageMapper_ConstantMapper.xtendbin | Bin 3164 -> 3164 bytes ...ampireLanguageMapper_ContainmentMapper.xtendbin | Bin 11904 -> 11904 bytes ...c2VampireLanguageMapper_RelationMapper.xtendbin | Bin 6454 -> 6454 bytes ...ogic2VampireLanguageMapper_ScopeMapper.xtendbin | Bin 10667 -> 10667 bytes .../.Logic2VampireLanguageMapper_Support.xtendbin | Bin 13046 -> 13046 bytes ...Logic2VampireLanguageMapper_TypeMapper.xtendbin | Bin 11136 -> 11136 bytes .../reasoner/builder/.Vampire2LogicMapper.xtendbin | Bin 1720 -> 1720 bytes .../reasoner/builder/.VampireHandler.xtendbin | Bin 4908 -> 4908 bytes ...ModelInterpretation_TypeInterpretation.xtendbin | Bin 1491 -> 1491 bytes ...ation_TypeInterpretation_FilteredTypes.xtendbin | Bin 1688 -> 1688 bytes .../metamodels/yakindu.aird | 1 - .../metamodels/yakindu.ecore | 39 +- .../metamodels/yakindu.genmodel | 2 +- .../metamodels/yakindu.genmodel_ | 34 + .../plugin.xml | 78 +- .../yakindu/queries/yakinduMutatedPatterns.vql | 270 ----- .../yakindu/queries/yakinduMutatedPatterns.vql_ | 270 +++++ .../test/yakindu/queries/yakinduPatterns.vql | 16 +- .../standalone/test/ecore/queries/.gitignore | 13 - .../standalone/test/fam/queries/.gitignore | 10 - .../standalone/test/fam/queries/Type.java | 770 --------------- .../standalone/test/yakindu/Choice.java | 2 +- .../standalone/test/yakindu/CompositeElement.java | 4 +- .../dslreasoner/standalone/test/yakindu/Entry.java | 2 +- .../dslreasoner/standalone/test/yakindu/Exit.java | 2 +- .../standalone/test/yakindu/FinalState.java | 2 +- .../standalone/test/yakindu/Pseudostate.java | 2 +- .../standalone/test/yakindu/Region.java | 4 +- .../standalone/test/yakindu/RegularState.java | 2 +- .../dslreasoner/standalone/test/yakindu/State.java | 2 +- .../standalone/test/yakindu/Statechart.java | 2 +- .../standalone/test/yakindu/Synchronization.java | 2 +- .../standalone/test/yakindu/Transition.java | 6 +- .../standalone/test/yakindu/Vertex.java | 6 +- .../standalone/test/yakindu/YakinduFactory.java | 114 +++ .../standalone/test/yakindu/YakinduPackage.java | 1038 ++++++++++++++++++++ .../standalone/test/yakindu/impl/ChoiceImpl.java | 4 +- .../test/yakindu/impl/CompositeElementImpl.java | 16 +- .../standalone/test/yakindu/impl/EntryImpl.java | 4 +- .../standalone/test/yakindu/impl/ExitImpl.java | 4 +- .../test/yakindu/impl/FinalStateImpl.java | 4 +- .../test/yakindu/impl/PseudostateImpl.java | 4 +- .../standalone/test/yakindu/impl/RegionImpl.java | 16 +- .../test/yakindu/impl/RegularStateImpl.java | 4 +- .../standalone/test/yakindu/impl/StateImpl.java | 20 +- .../test/yakindu/impl/StatechartImpl.java | 4 +- .../test/yakindu/impl/SynchronizationImpl.java | 4 +- .../test/yakindu/impl/TransitionImpl.java | 54 +- .../standalone/test/yakindu/impl/VertexImpl.java | 32 +- .../test/yakindu/impl/YakinduFactoryImpl.java | 183 ++++ .../test/yakindu/impl/YakinduPackageImpl.java | 494 ++++++++++ .../test/yakindu/impl/yakinduFactoryImpl.java | 183 ---- .../test/yakindu/impl/yakinduPackageImpl.java | 494 ---------- .../test/yakindu/util/YakinduAdapterFactory.java | 336 +++++++ .../test/yakindu/util/YakinduSwitch.java | 378 +++++++ .../test/yakindu/util/yakinduAdapterFactory.java | 336 ------- .../test/yakindu/util/yakinduSwitch.java | 378 ------- .../standalone/test/yakindu/yakinduFactory.java | 114 --- .../standalone/test/yakindu/yakinduPackage.java | 1038 -------------------- .../plugin.xml | 3 - .../dslreasoner/vampire/icse/.EcoreTest.xtendbin | Bin 4545 -> 4545 bytes .../dslreasoner/vampire/icse/.FAMTest.xtendbin | Bin 6314 -> 6314 bytes .../vampire/icse/.FileSystemTest.xtendbin | Bin 7116 -> 7116 bytes .../dslreasoner/vampire/icse/.GeneralTest.xtendbin | Bin 6456 -> 6456 bytes .../dslreasoner/vampire/icse/.YakinduTest.xtendbin | Bin 6678 -> 7025 bytes .../ecse/dslreasoner/vampire/icse/YakinduTest.java | 108 +- .../vampire/test/.MedicalSystem.xtendbin | Bin 4997 -> 4997 bytes .../dslreasoner/vampire/test/.SimpleRun.xtendbin | Bin 687 -> 687 bytes .../dslreasoner/vampire/test/.VampireTest.xtendbin | Bin 6500 -> 6500 bytes 89 files changed, 2992 insertions(+), 3916 deletions(-) create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel_ delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql_ delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduPackage.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduFactoryImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduPackageImpl.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduAdapterFactory.java create mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduSwitch.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java delete mode 100644 Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java (limited to 'Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin index 3ab0ceba..3f997d1e 100644 Binary files a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin and b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeModule.xtendbin differ diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin index 3d2fc82c..fd411426 100644 Binary files a/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin and b/Application/hu.bme.mit.inf.dslreasoner.application.ide/xtend-gen/hu/bme/mit/inf/dslreasoner/application/ide/.ApplicationConfigurationIdeSetup.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeModule.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeModule.xtendbin index 599f4b11..ec6f2b5e 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeModule.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeModule.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeSetup.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeSetup.xtendbin index 39db4d8f..142268cc 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeSetup.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ide/xtend-gen/ca/mcgill/ecse/dslreasoner/ide/.VampireLanguageIdeSetup.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/.VampireLanguageUiModule.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/.VampireLanguageUiModule.xtendbin index 261f76db..83816584 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/.VampireLanguageUiModule.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/.VampireLanguageUiModule.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/contentassist/.VampireLanguageProposalProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/contentassist/.VampireLanguageProposalProvider.xtendbin index 23282723..ef0e981f 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/contentassist/.VampireLanguageProposalProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/contentassist/.VampireLanguageProposalProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageDescriptionLabelProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageDescriptionLabelProvider.xtendbin index df1b5191..7ec5c9c6 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageDescriptionLabelProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageDescriptionLabelProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageLabelProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageLabelProvider.xtendbin index 712d5877..0efc1f64 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageLabelProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/labeling/.VampireLanguageLabelProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/outline/.VampireLanguageOutlineTreeProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/outline/.VampireLanguageOutlineTreeProvider.xtendbin index 52de9434..35e9ce12 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/outline/.VampireLanguageOutlineTreeProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/outline/.VampireLanguageOutlineTreeProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/quickfix/.VampireLanguageQuickfixProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/quickfix/.VampireLanguageQuickfixProvider.xtendbin index 5074417c..90005e11 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/quickfix/.VampireLanguageQuickfixProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language.ui/xtend-gen/ca/mcgill/ecse/dslreasoner/ui/quickfix/.VampireLanguageQuickfixProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageRuntimeModule.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageRuntimeModule.xtendbin index 9411e824..8e4e1612 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageRuntimeModule.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageRuntimeModule.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageStandaloneSetup.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageStandaloneSetup.xtendbin index bc079ba9..cc1180a8 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageStandaloneSetup.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/.VampireLanguageStandaloneSetup.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/formatting2/.VampireLanguageFormatter.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/formatting2/.VampireLanguageFormatter.xtendbin index 2f3d05aa..8a562c45 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/formatting2/.VampireLanguageFormatter.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/formatting2/.VampireLanguageFormatter.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/generator/.VampireLanguageGenerator.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/generator/.VampireLanguageGenerator.xtendbin index 62275f93..fb30c8b3 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/generator/.VampireLanguageGenerator.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/generator/.VampireLanguageGenerator.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/scoping/.VampireLanguageScopeProvider.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/scoping/.VampireLanguageScopeProvider.xtendbin index c5c4ea67..bc26963e 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/scoping/.VampireLanguageScopeProvider.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/scoping/.VampireLanguageScopeProvider.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/validation/.VampireLanguageValidator.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/validation/.VampireLanguageValidator.xtendbin index 45665484..d83995ca 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/validation/.VampireLanguageValidator.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.language/xtend-gen/ca/mcgill/ecse/dslreasoner/validation/.VampireLanguageValidator.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireAnalyzerConfiguration.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireAnalyzerConfiguration.xtendbin index cab2b7ec..43712734 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireAnalyzerConfiguration.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireAnalyzerConfiguration.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireSolver.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireSolver.xtendbin index 677cb718..b395b0c5 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireSolver.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/.VampireSolver.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper.xtendbin index d071aa8a..3e571f5b 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapperTrace.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapperTrace.xtendbin index 48090814..6c116851 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapperTrace.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapperTrace.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ConstantMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ConstantMapper.xtendbin index 154e42a2..7ba8f303 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ConstantMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ConstantMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ContainmentMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ContainmentMapper.xtendbin index 61774e26..ad62b1f9 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ContainmentMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ContainmentMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_RelationMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_RelationMapper.xtendbin index 2798d324..150ac835 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_RelationMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_RelationMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ScopeMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ScopeMapper.xtendbin index 5f3f349b..c181e53c 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ScopeMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_ScopeMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_Support.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_Support.xtendbin index 787c44a2..68d8cfb3 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_Support.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_Support.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_TypeMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_TypeMapper.xtendbin index b6e94088..1bef8bd1 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_TypeMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Logic2VampireLanguageMapper_TypeMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Vampire2LogicMapper.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Vampire2LogicMapper.xtendbin index cd1b994d..9c4555e0 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Vampire2LogicMapper.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.Vampire2LogicMapper.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireHandler.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireHandler.xtendbin index 2cc7c421..7bd6797c 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireHandler.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireHandler.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation.xtendbin index 25a165b1..6a10d85a 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation.xtendbin differ diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation_FilteredTypes.xtendbin b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation_FilteredTypes.xtendbin index 8697d473..26460f68 100644 Binary files a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation_FilteredTypes.xtendbin and b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/.VampireModelInterpretation_TypeInterpretation_FilteredTypes.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.aird b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.aird index be45a301..518acc99 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.aird +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.aird @@ -2,7 +2,6 @@ yakindu.ecore - yakindu.genmodel diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.ecore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.ecore index 0c944db8..0e800e4a 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.ecore +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.ecore @@ -1,26 +1,33 @@ - - + + - - + + - + - - + + - - - - - + + + + + - + - - - + + + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel index b1f75d76..46801b3e 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel @@ -5,7 +5,7 @@ rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0" copyrightFields="false" operationReflection="true" importOrganizing="true"> yakindu.ecore - diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel_ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel_ new file mode 100644 index 00000000..b1f75d76 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/yakindu.genmodel_ @@ -0,0 +1,34 @@ + + + yakindu.ecore + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml index a2a573fc..0335dc9f 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml @@ -4,10 +4,6 @@ - - - - @@ -34,74 +30,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -129,6 +57,8 @@ + + @@ -140,4 +70,8 @@ + + + + diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 deleted file mode 100644 index 2e498670..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql +++ /dev/null @@ -1,270 +0,0 @@ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries - -import epackage "YakinduMetamodel" - -///////// -// Entry -///////// - -pattern entryInRegion_M0(r1 : Region, e1 : Entry) { - Region.vertices(r1, e1); -} -pattern entryInRegion_M1(r1 : Region, e1) { - Region.vertices(r1, e1); -} -pattern entryInRegion_M2(r1 : Region, e1: Entry) { - // For positive constraint - Region(r1);Entry(e1); -} - - -//@Constraint(severity="error", message="error", key = {r1}) -pattern noEntryInRegion_M0(r1 : Region) { - neg find entryInRegion_M0(r1, _); -} -pattern noEntryInRegion_M1(r1 : Region) { - neg find entryInRegion_M1(r1, _); -} -pattern noEntryInRegion_M2(r1 : Region) { - neg find entryInRegion_M2(r1, _); -} -pattern noEntryInRegion_M3(r1 : Region) { - find entryInRegion_M0(r1, _); -} -pattern noEntryInRegion_M4(r1 : Region) { - find entryInRegion_M1(r1, _); -} -pattern noEntryInRegion_M5(r1 : Region) { - find entryInRegion_M2(r1, _); -} - -//@Constraint(severity="error", message="error", key = {r}) -pattern multipleEntryInRegion_M0(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M1(r : Region) { - find entryInRegion_M1(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M2(r : Region) { - find entryInRegion_M2(r, e1); - find entryInRegion_M0(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M3(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M1(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M4(r : Region) { - find entryInRegion_M2(r, e1); - find entryInRegion_M2(r, e2); - e1 != e2; -} -pattern multipleEntryInRegion_M5(r : Region) { - find entryInRegion_M0(r, e1); - find entryInRegion_M0(r, e2); -} - - -pattern transition_M0(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Transition.target(t, trg); -} -pattern transition_M1(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Vertex(trg); -} -pattern transition_M2(t : Transition, src : Vertex, trg : Vertex) { - Vertex(src); - Transition.target(t, trg); -} -pattern transition_M3(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t_x, src); - Transition.target(t, trg); -} -pattern transition_M4(t : Transition, src : Vertex, trg : Vertex) { - Transition.source(t, src); - Transition.target(t_x, trg); -} - -//@Constraint(severity="error", message="error", key = {e}) -pattern incomingToEntry_M0(t : Transition, e : Entry) { - find transition_M0(t, _, e); -} -pattern incomingToEntry_1(t : Transition, e) { - find transition_M0(t, _, e); -} -pattern incomingToEntry_2(t : Transition, e : Entry) { - find transition_M1(t, _, e); -} -pattern incomingToEntry_3(t : Transition, e : Entry) { - find transition_M2(t, _, e); -} -pattern incomingToEntry_4(t : Transition, e : Entry) { - find transition_M3(t, _, e); -} -pattern incomingToEntry_5(t : Transition, e : Entry) { - find transition_M4(t, _, e); -} - -pattern noOutgoingTransitionFromEntry_M0(e : Entry) { - neg find transition_M0(_, e, _); -} - -pattern noOutgoingTransitionFromEntry_M1(e) { - Vertex(e); - neg find transition_M0(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M2(e : Entry) { - neg find transition_M1(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M3(e : Entry) { - neg find transition_M2(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M4(e : Entry) { - neg find transition_M3(_, e, _); -} -pattern noOutgoingTransitionFromEntry_M5(e : Entry) { - neg find transition_M4(_, e, _); -} - - -//@Constraint(severity="error", message="error", key = {e}) -pattern multipleTransitionFromEntry_M0(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M1(e, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M2(e : Entry, t1 : Transition, t2: Transition) { - Transition(t1); - Entry.outgoingTransitions(e,t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M3(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Transition(t2); - t1!=t2; -} -pattern multipleTransitionFromEntry_M4(e : Entry, t1 : Transition, t2: Transition) { - Entry.outgoingTransitions(e,t1); - Entry.outgoingTransitions(e,t2); -} - -///////// -// Exit -///////// - -//@Constraint(severity="error", message="error", key = {e}) -pattern outgoingFromExit_M0(t : Transition, e : Exit) { - Exit.outgoingTransitions(e,t); -} -pattern outgoingFromExit_M1(t : Transition, e) { - Vertex.outgoingTransitions(e,t); -} -pattern outgoingFromExit_M2(t : Transition, e : Exit) { - Transition(t); - Exit(e); -} - -///////// -// Final -///////// - -//@Constraint(severity="error", message="error", key = {f}) -pattern outgoingFromFinal_M0(t : Transition, f : FinalState) { - FinalState.outgoingTransitions(f,t); -} -pattern outgoingFromFinal_M1(t : Transition, f) { - Vertex.outgoingTransitions(f,t); -} -pattern outgoingFromFinal_M2(t : Transition, f : FinalState) { - Transition(t); - FinalState(f); -} - -///////// -// State vs Region -///////// - -//@Constraint(severity="error", message="error", key = {region}) -pattern noStateInRegion_M0(region: Region) { - neg find StateInRegion_M0(region,_); -} -pattern noStateInRegion_M1(region: Region) { - neg find StateInRegion_M1(region,_); -} -pattern noStateInRegion_M2(region: Region) { - neg find StateInRegion_M2(region,_); -} -pattern noStateInRegion_M3(region: Region) { - find StateInRegion_M0(region,_); -} - -pattern StateInRegion_M0(region: Region, state: State) { - Region.vertices(region,state); -} -pattern StateInRegion_M1(region: Region, state) { - Region.vertices(region,state); -} -pattern StateInRegion_M2(region: Region, state:State) { - Region(region);State(state); -} - -///////// -// Choice -///////// - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoOutgoing_M0(c : Choice) { - neg find transition_M0(_, c, _); -} -pattern choiceHasNoOutgoing_M1(c:Vertex) { - neg find transition_M0(_, c, _); -} -pattern choiceHasNoOutgoing_M2(c : Choice) { - neg find transition_M1(_, c, _); -} -pattern choiceHasNoOutgoing_M3(c : Choice) { - neg find transition_M2(_, c, _); -} -pattern choiceHasNoOutgoing_M4(c : Choice) { - neg find transition_M3(_, c, _); -} -pattern choiceHasNoOutgoing_M5(c : Choice) { - neg find transition_M4(_, c, _); -} -pattern choiceHasNoOutgoing_M6(c : Choice) { - find transition_M0(_, c, _); -} - -@Constraint(severity="error", message="error", key = {c}) -pattern choiceHasNoIncoming_M0(c: Choice) { - neg find transition_M0(_, _, c); -} -pattern choiceHasNoIncoming_M1(c:Vertex) { - neg find transition_M0(_, _, c); -} -pattern choiceHasNoIncoming_M2(c: Choice) { - neg find transition_M1(_, _, c); -} -pattern choiceHasNoIncoming_M3(c: Choice) { - neg find transition_M2(_, _, c); -} -pattern choiceHasNoIncoming_M4(c: Choice) { - neg find transition_M3(_, _, c); -} -pattern choiceHasNoIncoming_M5(c: Choice) { - neg find transition_M4(_, _, c); -} -pattern choiceHasNoIncoming_M6(c: Choice) { - find transition_M0(_, _, c); -} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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_ new file mode 100644 index 00000000..2e498670 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql_ @@ -0,0 +1,270 @@ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries + +import epackage "YakinduMetamodel" + +///////// +// Entry +///////// + +pattern entryInRegion_M0(r1 : Region, e1 : Entry) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M1(r1 : Region, e1) { + Region.vertices(r1, e1); +} +pattern entryInRegion_M2(r1 : Region, e1: Entry) { + // For positive constraint + Region(r1);Entry(e1); +} + + +//@Constraint(severity="error", message="error", key = {r1}) +pattern noEntryInRegion_M0(r1 : Region) { + neg find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M1(r1 : Region) { + neg find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M2(r1 : Region) { + neg find entryInRegion_M2(r1, _); +} +pattern noEntryInRegion_M3(r1 : Region) { + find entryInRegion_M0(r1, _); +} +pattern noEntryInRegion_M4(r1 : Region) { + find entryInRegion_M1(r1, _); +} +pattern noEntryInRegion_M5(r1 : Region) { + find entryInRegion_M2(r1, _); +} + +//@Constraint(severity="error", message="error", key = {r}) +pattern multipleEntryInRegion_M0(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M1(r : Region) { + find entryInRegion_M1(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M2(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M0(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M3(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M1(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M4(r : Region) { + find entryInRegion_M2(r, e1); + find entryInRegion_M2(r, e2); + e1 != e2; +} +pattern multipleEntryInRegion_M5(r : Region) { + find entryInRegion_M0(r, e1); + find entryInRegion_M0(r, e2); +} + + +pattern transition_M0(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t, trg); +} +pattern transition_M1(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Vertex(trg); +} +pattern transition_M2(t : Transition, src : Vertex, trg : Vertex) { + Vertex(src); + Transition.target(t, trg); +} +pattern transition_M3(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t_x, src); + Transition.target(t, trg); +} +pattern transition_M4(t : Transition, src : Vertex, trg : Vertex) { + Transition.source(t, src); + Transition.target(t_x, trg); +} + +//@Constraint(severity="error", message="error", key = {e}) +pattern incomingToEntry_M0(t : Transition, e : Entry) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_1(t : Transition, e) { + find transition_M0(t, _, e); +} +pattern incomingToEntry_2(t : Transition, e : Entry) { + find transition_M1(t, _, e); +} +pattern incomingToEntry_3(t : Transition, e : Entry) { + find transition_M2(t, _, e); +} +pattern incomingToEntry_4(t : Transition, e : Entry) { + find transition_M3(t, _, e); +} +pattern incomingToEntry_5(t : Transition, e : Entry) { + find transition_M4(t, _, e); +} + +pattern noOutgoingTransitionFromEntry_M0(e : Entry) { + neg find transition_M0(_, e, _); +} + +pattern noOutgoingTransitionFromEntry_M1(e) { + Vertex(e); + neg find transition_M0(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M2(e : Entry) { + neg find transition_M1(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M3(e : Entry) { + neg find transition_M2(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M4(e : Entry) { + neg find transition_M3(_, e, _); +} +pattern noOutgoingTransitionFromEntry_M5(e : Entry) { + neg find transition_M4(_, e, _); +} + + +//@Constraint(severity="error", message="error", key = {e}) +pattern multipleTransitionFromEntry_M0(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M1(e, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M2(e : Entry, t1 : Transition, t2: Transition) { + Transition(t1); + Entry.outgoingTransitions(e,t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M3(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Transition(t2); + t1!=t2; +} +pattern multipleTransitionFromEntry_M4(e : Entry, t1 : Transition, t2: Transition) { + Entry.outgoingTransitions(e,t1); + Entry.outgoingTransitions(e,t2); +} + +///////// +// Exit +///////// + +//@Constraint(severity="error", message="error", key = {e}) +pattern outgoingFromExit_M0(t : Transition, e : Exit) { + Exit.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M1(t : Transition, e) { + Vertex.outgoingTransitions(e,t); +} +pattern outgoingFromExit_M2(t : Transition, e : Exit) { + Transition(t); + Exit(e); +} + +///////// +// Final +///////// + +//@Constraint(severity="error", message="error", key = {f}) +pattern outgoingFromFinal_M0(t : Transition, f : FinalState) { + FinalState.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M1(t : Transition, f) { + Vertex.outgoingTransitions(f,t); +} +pattern outgoingFromFinal_M2(t : Transition, f : FinalState) { + Transition(t); + FinalState(f); +} + +///////// +// State vs Region +///////// + +//@Constraint(severity="error", message="error", key = {region}) +pattern noStateInRegion_M0(region: Region) { + neg find StateInRegion_M0(region,_); +} +pattern noStateInRegion_M1(region: Region) { + neg find StateInRegion_M1(region,_); +} +pattern noStateInRegion_M2(region: Region) { + neg find StateInRegion_M2(region,_); +} +pattern noStateInRegion_M3(region: Region) { + find StateInRegion_M0(region,_); +} + +pattern StateInRegion_M0(region: Region, state: State) { + Region.vertices(region,state); +} +pattern StateInRegion_M1(region: Region, state) { + Region.vertices(region,state); +} +pattern StateInRegion_M2(region: Region, state:State) { + Region(region);State(state); +} + +///////// +// Choice +///////// + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoOutgoing_M0(c : Choice) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M1(c:Vertex) { + neg find transition_M0(_, c, _); +} +pattern choiceHasNoOutgoing_M2(c : Choice) { + neg find transition_M1(_, c, _); +} +pattern choiceHasNoOutgoing_M3(c : Choice) { + neg find transition_M2(_, c, _); +} +pattern choiceHasNoOutgoing_M4(c : Choice) { + neg find transition_M3(_, c, _); +} +pattern choiceHasNoOutgoing_M5(c : Choice) { + neg find transition_M4(_, c, _); +} +pattern choiceHasNoOutgoing_M6(c : Choice) { + find transition_M0(_, c, _); +} + +@Constraint(severity="error", message="error", key = {c}) +pattern choiceHasNoIncoming_M0(c: Choice) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M1(c:Vertex) { + neg find transition_M0(_, _, c); +} +pattern choiceHasNoIncoming_M2(c: Choice) { + neg find transition_M1(_, _, c); +} +pattern choiceHasNoIncoming_M3(c: Choice) { + neg find transition_M2(_, _, c); +} +pattern choiceHasNoIncoming_M4(c: Choice) { + neg find transition_M3(_, _, c); +} +pattern choiceHasNoIncoming_M5(c: Choice) { + neg find transition_M4(_, _, c); +} +pattern choiceHasNoIncoming_M6(c: Choice) { + find transition_M0(_, _, c); +} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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..ea8184de 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/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 @@ -217,11 +217,11 @@ pattern twoSynch(s1 : Synchronization, s2 : Synchronization) { /** * Model generation task: at least one synch */ -//@Constraint(severity="error", message="error", key = {s}) -//pattern noSynch(s:Statechart) { -// Statechart(s); -// neg find synch(_); -//} -//pattern synch(s:Synchronization) { -// Synchronization(s); -//} \ No newline at end of file +@Constraint(severity="error", message="error", key = {s}) +pattern noSynch(s:Statechart) { + Statechart(s); + neg find synch(_); +} +pattern synch(s:Synchronization) { + Synchronization(s); +} \ No newline at end of file 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 deleted file mode 100644 index a9786e0f..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -/.DirectSupertype.java._trace -/.Ecore.java._trace -/.LoopInInheritence.java._trace -/.NonSymmetricOpposite.java._trace -/.Opposite.java._trace -/.OppositeDifferentClass.java._trace -/.EcorePatterns.java._trace -/DirectSupertype.java -/EcorePatterns.java -/LoopInInheritence.java -/NonSymmetricOpposite.java -/Opposite.java -/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 deleted file mode 100644 index 60f1891b..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/.FamPatterns.java._trace -/.Model.java._trace -/.Parent.java._trace -/.RootElements.java._trace -/.TerminatorAndInformation.java._trace -/.Type.java._trace -/FamPatterns.java -/Model.java -/Parent.java -/RootElements.java 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 deleted file mode 100644 index bc3230c5..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java +++ /dev/null @@ -1,770 +0,0 @@ -/** - * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries; - -import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function; -import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType; -import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Parent; -import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.RootElements; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.apache.log4j.Logger; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EDataType; -import org.eclipse.viatra.query.runtime.api.IPatternMatch; -import org.eclipse.viatra.query.runtime.api.IQuerySpecification; -import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery; -import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification; -import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher; -import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch; -import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey; -import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey; -import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; -import org.eclipse.viatra.query.runtime.matchers.psystem.PBody; -import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable; -import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall; -import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection; -import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple; -import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; -import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil; - -/** - * A pattern-specific query specification that can instantiate Matcher in a type-safe way. - * - *

Original source: - *

- *         {@literal @}QueryBasedFeature 
- *         pattern type(This : Function, Target : FunctionType) = {
- *         	find rootElements(_Model, This);
- *         	Target == FunctionType::Root;
- *         } or {
- *         	neg find parent(_Child, This);
- *         	neg find rootElements(_Model, This);
- *         	Target == FunctionType::Leaf;
- *         } or  {
- *         	find parent(This, _Par);
- *         	find parent(_Child, This);
- *         	Target == FunctionType::Intermediate;
- *         }
- * 
- * - * @see Matcher - * @see Match - * - */ -@SuppressWarnings("all") -public final class Type extends BaseGeneratedEMFQuerySpecification { - /** - * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern, - * to be used in conjunction with {@link Matcher}. - * - *

Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned. - * Each instance is a (possibly partial) substitution of pattern parameters, - * usable to represent a match of the pattern in the result of a query, - * or to specify the bound (fixed) input parameters when issuing a query. - * - * @see Matcher - * - */ - public static abstract class Match extends BasePatternMatch { - private Function fThis; - - private FunctionType fTarget; - - private static List parameterNames = makeImmutableList("This", "Target"); - - private Match(final Function pThis, final FunctionType pTarget) { - this.fThis = pThis; - this.fTarget = pTarget; - } - - @Override - public Object get(final String parameterName) { - if ("This".equals(parameterName)) return this.fThis; - if ("Target".equals(parameterName)) return this.fTarget; - return null; - } - - public Function getThis() { - return this.fThis; - } - - public FunctionType getTarget() { - return this.fTarget; - } - - @Override - public boolean set(final String parameterName, final Object newValue) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - if ("This".equals(parameterName) ) { - this.fThis = (Function) newValue; - return true; - } - if ("Target".equals(parameterName) ) { - this.fTarget = (FunctionType) newValue; - return true; - } - return false; - } - - public void setThis(final Function pThis) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - this.fThis = pThis; - } - - public void setTarget(final FunctionType pTarget) { - if (!isMutable()) throw new java.lang.UnsupportedOperationException(); - this.fTarget = pTarget; - } - - @Override - public String patternName() { - return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"; - } - - @Override - public List parameterNames() { - return Type.Match.parameterNames; - } - - @Override - public Object[] toArray() { - return new Object[]{fThis, fTarget}; - } - - @Override - public Type.Match toImmutable() { - return isMutable() ? newMatch(fThis, fTarget) : this; - } - - @Override - public String prettyPrint() { - StringBuilder result = new StringBuilder(); - result.append("\"This\"=" + prettyPrintValue(fThis) + ", "); - result.append("\"Target\"=" + prettyPrintValue(fTarget)); - return result.toString(); - } - - @Override - public int hashCode() { - return Objects.hash(fThis, fTarget); - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) { - return false; - } - if ((obj instanceof Type.Match)) { - Type.Match other = (Type.Match) obj; - return Objects.equals(fThis, other.fThis) && Objects.equals(fTarget, other.fTarget); - } else { - // this should be infrequent - if (!(obj instanceof IPatternMatch)) { - return false; - } - IPatternMatch otherSig = (IPatternMatch) obj; - return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray()); - } - } - - @Override - public Type specification() { - return Type.instance(); - } - - /** - * Returns an empty, mutable match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @return the empty match. - * - */ - public static Type.Match newEmptyMatch() { - return new Mutable(null, null); - } - - /** - * Returns a mutable (partial) match. - * Fields of the mutable match can be filled to create a partial match, usable as matcher input. - * - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return the new, mutable (partial) match object. - * - */ - public static Type.Match newMutableMatch(final Function pThis, final FunctionType pTarget) { - return new Mutable(pThis, pTarget); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return the (partial) match object. - * - */ - public static Type.Match newMatch(final Function pThis, final FunctionType pTarget) { - return new Immutable(pThis, pTarget); - } - - private static final class Mutable extends Type.Match { - Mutable(final Function pThis, final FunctionType pTarget) { - super(pThis, pTarget); - } - - @Override - public boolean isMutable() { - return true; - } - } - - private static final class Immutable extends Type.Match { - Immutable(final Function pThis, final FunctionType pTarget) { - super(pThis, pTarget); - } - - @Override - public boolean isMutable() { - return false; - } - } - } - - /** - * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern, - * providing pattern-specific query methods. - * - *

Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)}, - * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}. - * - *

Matches of the pattern will be represented as {@link Match}. - * - *

Original source: - *

-   * {@literal @}QueryBasedFeature 
-   * pattern type(This : Function, Target : FunctionType) = {
-   * 	find rootElements(_Model, This);
-   * 	Target == FunctionType::Root;
-   * } or {
-   * 	neg find parent(_Child, This);
-   * 	neg find rootElements(_Model, This);
-   * 	Target == FunctionType::Leaf;
-   * } or  {
-   * 	find parent(This, _Par);
-   * 	find parent(_Child, This);
-   * 	Target == FunctionType::Intermediate;
-   * }
-   * 
- * - * @see Match - * @see Type - * - */ - public static class Matcher extends BaseMatcher { - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - public static Type.Matcher on(final ViatraQueryEngine engine) { - // check if matcher already exists - Matcher matcher = engine.getExistingMatcher(querySpecification()); - if (matcher == null) { - matcher = (Matcher)engine.getMatcher(querySpecification()); - } - return matcher; - } - - /** - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * @return an initialized matcher - * @noreference This method is for internal matcher initialization by the framework, do not call it manually. - * - */ - public static Type.Matcher create() { - return new Matcher(); - } - - private final static int POSITION_THIS = 0; - - private final static int POSITION_TARGET = 1; - - private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Type.Matcher.class); - - /** - * Initializes the pattern matcher within an existing VIATRA Query engine. - * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned. - * - * @param engine the existing VIATRA Query engine in which this matcher will be created. - * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation - * - */ - private Matcher() { - super(querySpecification()); - } - - /** - * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return matches represented as a Match object. - * - */ - public Collection getAllMatches(final Function pThis, final FunctionType pTarget) { - return rawStreamAllMatches(new Object[]{pThis, pTarget}).collect(Collectors.toSet()); - } - - /** - * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return a stream of matches represented as a Match object. - * - */ - public Stream streamAllMatches(final Function pThis, final FunctionType pTarget) { - return rawStreamAllMatches(new Object[]{pThis, pTarget}); - } - - /** - * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return a match represented as a Match object, or null if no match is found. - * - */ - public Optional getOneArbitraryMatch(final Function pThis, final FunctionType pTarget) { - return rawGetOneArbitraryMatch(new Object[]{pThis, pTarget}); - } - - /** - * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match, - * under any possible substitution of the unspecified parameters (if any). - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return true if the input is a valid (partial) match of the pattern. - * - */ - public boolean hasMatch(final Function pThis, final FunctionType pTarget) { - return rawHasMatch(new Object[]{pThis, pTarget}); - } - - /** - * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return the number of pattern matches found. - * - */ - public int countMatches(final Function pThis, final FunctionType pTarget) { - return rawCountMatches(new Object[]{pThis, pTarget}); - } - - /** - * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters. - * Neither determinism nor randomness of selection is guaranteed. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @param processor the action that will process the selected match. - * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked - * - */ - public boolean forOneArbitraryMatch(final Function pThis, final FunctionType pTarget, final Consumer processor) { - return rawForOneArbitraryMatch(new Object[]{pThis, pTarget}, processor); - } - - /** - * Returns a new (partial) match. - * This can be used e.g. to call the matcher with a partial match. - *

The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object. - * @param pThis the fixed value of pattern parameter This, or null if not bound. - * @param pTarget the fixed value of pattern parameter Target, or null if not bound. - * @return the (partial) match object. - * - */ - public Type.Match newMatch(final Function pThis, final FunctionType pTarget) { - return Type.Match.newMatch(pThis, pTarget); - } - - /** - * Retrieve the set of values that occur in matches for This. - * @return the Set of all values or empty set if there are no matches - * - */ - protected Stream rawStreamAllValuesOfThis(final Object[] parameters) { - return rawStreamAllValues(POSITION_THIS, parameters).map(Function.class::cast); - } - - /** - * Retrieve the set of values that occur in matches for This. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfThis() { - return rawStreamAllValuesOfThis(emptyArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for This. - * @return the Set of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfThis() { - return rawStreamAllValuesOfThis(emptyArray()); - } - - /** - * Retrieve the set of values that occur in matches for This. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * - * @return the Stream of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfThis(final Type.Match partialMatch) { - return rawStreamAllValuesOfThis(partialMatch.toArray()); - } - - /** - * Retrieve the set of values that occur in matches for This. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * - * @return the Stream of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfThis(final FunctionType pTarget) { - return rawStreamAllValuesOfThis(new Object[]{null, pTarget}); - } - - /** - * Retrieve the set of values that occur in matches for This. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfThis(final Type.Match partialMatch) { - return rawStreamAllValuesOfThis(partialMatch.toArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for This. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfThis(final FunctionType pTarget) { - return rawStreamAllValuesOfThis(new Object[]{null, pTarget}).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for Target. - * @return the Set of all values or empty set if there are no matches - * - */ - protected Stream rawStreamAllValuesOfTarget(final Object[] parameters) { - return rawStreamAllValues(POSITION_TARGET, parameters).map(FunctionType.class::cast); - } - - /** - * Retrieve the set of values that occur in matches for Target. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfTarget() { - return rawStreamAllValuesOfTarget(emptyArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for Target. - * @return the Set of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfTarget() { - return rawStreamAllValuesOfTarget(emptyArray()); - } - - /** - * Retrieve the set of values that occur in matches for Target. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * - * @return the Stream of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfTarget(final Type.Match partialMatch) { - return rawStreamAllValuesOfTarget(partialMatch.toArray()); - } - - /** - * Retrieve the set of values that occur in matches for Target. - *

- * NOTE: It is important not to modify the source model while the stream is being processed. - * If the match set of the pattern changes during processing, the contents of the stream is undefined. - * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code. - * - * @return the Stream of all values or empty set if there are no matches - * - */ - public Stream streamAllValuesOfTarget(final Function pThis) { - return rawStreamAllValuesOfTarget(new Object[]{pThis, null}); - } - - /** - * Retrieve the set of values that occur in matches for Target. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfTarget(final Type.Match partialMatch) { - return rawStreamAllValuesOfTarget(partialMatch.toArray()).collect(Collectors.toSet()); - } - - /** - * Retrieve the set of values that occur in matches for Target. - * @return the Set of all values or empty set if there are no matches - * - */ - public Set getAllValuesOfTarget(final Function pThis) { - return rawStreamAllValuesOfTarget(new Object[]{pThis, null}).collect(Collectors.toSet()); - } - - @Override - protected Type.Match tupleToMatch(final Tuple t) { - try { - return Type.Match.newMatch((Function) t.get(POSITION_THIS), (FunctionType) t.get(POSITION_TARGET)); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in tuple not properly typed!",e); - return null; - } - } - - @Override - protected Type.Match arrayToMatch(final Object[] match) { - try { - return Type.Match.newMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - @Override - protected Type.Match arrayToMatchMutable(final Object[] match) { - try { - return Type.Match.newMutableMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]); - } catch(ClassCastException e) { - LOGGER.error("Element(s) in array not properly typed!",e); - return null; - } - } - - /** - * @return the singleton instance of the query specification of this pattern - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static IQuerySpecification querySpecification() { - return Type.instance(); - } - } - - private Type() { - super(GeneratedPQuery.INSTANCE); - } - - /** - * @return the singleton instance of the query specification - * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded - * - */ - public static Type instance() { - try{ - return LazyHolder.INSTANCE; - } catch (ExceptionInInitializerError err) { - throw processInitializerError(err); - } - } - - @Override - protected Type.Matcher instantiate(final ViatraQueryEngine engine) { - return Type.Matcher.on(engine); - } - - @Override - public Type.Matcher instantiate() { - return Type.Matcher.create(); - } - - @Override - public Type.Match newEmptyMatch() { - return Type.Match.newEmptyMatch(); - } - - @Override - public Type.Match newMatch(final Object... parameters) { - return Type.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType) parameters[1]); - } - - /** - * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created - * not at the class load time of the outer class, - * 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: ) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}. - * - *

This workaround is required e.g. to support recursion. - * - */ - private static class LazyHolder { - private final static Type INSTANCE = new Type(); - - /** - * Statically initializes the query specification after the field {@link #INSTANCE} is assigned. - * This initialization order is required to support indirect recursion. - * - *

The static initializer is defined using a helper field to work around limitations of the code generator. - * - */ - private final static Object STATIC_INITIALIZER = ensureInitialized(); - - public static Object ensureInitialized() { - INSTANCE.ensureInitializedInternal(); - return null; - } - } - - private static class GeneratedPQuery extends BaseGeneratedEMFPQuery { - private final static Type.GeneratedPQuery INSTANCE = new GeneratedPQuery(); - - private final PParameter parameter_This = new PParameter("This", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "Function")), PParameterDirection.INOUT); - - private final PParameter parameter_Target = new PParameter("Target", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType", new EDataTypeInSlotsKey((EDataType)getClassifierLiteralSafe("FamMetamodel", "FunctionType")), PParameterDirection.INOUT); - - private final List parameters = Arrays.asList(parameter_This, parameter_Target); - - private GeneratedPQuery() { - super(PVisibility.PUBLIC); - } - - @Override - public String getFullyQualifiedName() { - return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"; - } - - @Override - public List getParameterNames() { - return Arrays.asList("This","Target"); - } - - @Override - public List getParameters() { - return parameters; - } - - @Override - public Set doGetContainedBodies() { - setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED)); - Set bodies = new LinkedHashSet<>(); - { - PBody body = new PBody(this); - PVariable var_This = body.getOrCreateVariableByName("This"); - PVariable var_Target = body.getOrCreateVariableByName("Target"); - PVariable var__Model = body.getOrCreateVariableByName("_Model"); - new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); - new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_This, parameter_This), - new ExportedParameter(body, var_Target, parameter_Target) - )); - // find rootElements(_Model, This) - new PositivePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation()); - // Target == FunctionType::Root - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Root").getInstance()); - new Equality(body, var_Target, var__virtual_0_); - bodies.add(body); - } - { - PBody body = new PBody(this); - PVariable var_This = body.getOrCreateVariableByName("This"); - PVariable var_Target = body.getOrCreateVariableByName("Target"); - PVariable var__Child = body.getOrCreateVariableByName("_Child"); - PVariable var__Model = body.getOrCreateVariableByName("_Model"); - new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); - new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_This, parameter_This), - new ExportedParameter(body, var_Target, parameter_Target) - )); - // neg find parent(_Child, This) - new NegativePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation()); - // neg find rootElements(_Model, This) - new NegativePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation()); - // Target == FunctionType::Leaf - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Leaf").getInstance()); - new Equality(body, var_Target, var__virtual_0_); - bodies.add(body); - } - { - PBody body = new PBody(this); - PVariable var_This = body.getOrCreateVariableByName("This"); - PVariable var_Target = body.getOrCreateVariableByName("Target"); - PVariable var__Par = body.getOrCreateVariableByName("_Par"); - PVariable var__Child = body.getOrCreateVariableByName("_Child"); - new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function"))); - new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType"))); - body.setSymbolicParameters(Arrays.asList( - new ExportedParameter(body, var_This, parameter_This), - new ExportedParameter(body, var_Target, parameter_Target) - )); - // find parent(This, _Par) - new PositivePatternCall(body, Tuples.flatTupleOf(var_This, var__Par), Parent.instance().getInternalQueryRepresentation()); - // find parent(_Child, This) - new PositivePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation()); - // Target == FunctionType::Intermediate - PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}"); - new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Intermediate").getInstance()); - new Equality(body, var_Target, var__virtual_0_); - bodies.add(body); - } - { - PAnnotation annotation = new PAnnotation("QueryBasedFeature"); - addAnnotation(annotation); - } - return bodies; - } - } -} diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java index cc4049c4..fc2f0328 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Choice.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getChoice() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getChoice() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java index 037b1b3c..b0e38bcf 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/CompositeElement.java @@ -18,7 +18,7 @@ import org.eclipse.emf.ecore.EObject; *

  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions Regions}
  • * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getCompositeElement() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getCompositeElement() * @model abstract="true" * @generated */ @@ -33,7 +33,7 @@ public interface CompositeElement extends EObject { *

    * * @return the value of the 'Regions' containment reference list. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getCompositeElement_Regions() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getCompositeElement_Regions() * @model containment="true" * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java index da40c481..c8adb603 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Entry.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getEntry() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getEntry() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java index 9f8e12d3..b134c14f 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Exit.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getExit() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getExit() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java index 33703d36..5ec2a16a 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/FinalState.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getFinalState() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getFinalState() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java index e6a003f9..670a172a 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Pseudostate.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getPseudostate() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getPseudostate() * @model abstract="true" * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java index f4c3f114..84081ae8 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Region.java @@ -18,7 +18,7 @@ import org.eclipse.emf.ecore.EObject; *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices Vertices}
  • * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegion() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getRegion() * @model * @generated */ @@ -33,7 +33,7 @@ public interface Region extends EObject { *

    * * @return the value of the 'Vertices' containment reference list. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegion_Vertices() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getRegion_Vertices() * @model containment="true" ordered="false" * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java index 7db584e5..4ad05644 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/RegularState.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getRegularState() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getRegularState() * @model abstract="true" * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java index 3c65be40..09667a01 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/State.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getState() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getState() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java index 33a1dd7a..0f8e383d 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Statechart.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getStatechart() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getStatechart() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java index f1294200..a06bc066 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Synchronization.java @@ -9,7 +9,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; * * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getSynchronization() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getSynchronization() * @model * @generated */ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java index 543cc73b..c90c8d23 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Transition.java @@ -17,7 +17,7 @@ import org.eclipse.emf.ecore.EObject; *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}
  • * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getTransition() * @model * @generated */ @@ -33,7 +33,7 @@ public interface Transition extends EObject { * * @return the value of the 'Target' reference. * @see #setTarget(Vertex) - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition_Target() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getTransition_Target() * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions * @model opposite="incomingTransitions" required="true" ordered="false" * @generated @@ -61,7 +61,7 @@ public interface Transition extends EObject { * * @return the value of the 'Source' container reference. * @see #setSource(Vertex) - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getTransition_Source() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getTransition_Source() * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions * @model opposite="outgoingTransitions" transient="false" ordered="false" * @generated diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java index 6005a550..e4631e42 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/Vertex.java @@ -19,7 +19,7 @@ import org.eclipse.emf.ecore.EObject; *
  • {@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}
  • * * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getVertex() * @model abstract="true" * @generated */ @@ -35,7 +35,7 @@ public interface Vertex extends EObject { *

    * * @return the value of the 'Incoming Transitions' reference list. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex_IncomingTransitions() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getVertex_IncomingTransitions() * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget * @model opposite="target" ordered="false" * @generated @@ -53,7 +53,7 @@ public interface Vertex extends EObject { *

    * * @return the value of the 'Outgoing Transitions' containment reference list. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#getVertex_OutgoingTransitions() + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#getVertex_OutgoingTransitions() * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource * @model opposite="source" containment="true" ordered="false" * @generated diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduFactory.java new file mode 100644 index 00000000..53afae22 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduFactory.java @@ -0,0 +1,114 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.ecore.EFactory; + +/** + * + * The Factory for the model. + * It provides a create method for each non-abstract class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage + * @generated + */ +public interface YakinduFactory extends EFactory { + /** + * The singleton instance of the factory. + * + * + * @generated + */ + YakinduFactory eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduFactoryImpl.init(); + + /** + * Returns a new object of class 'Region'. + * + * + * @return a new object of class 'Region'. + * @generated + */ + Region createRegion(); + + /** + * Returns a new object of class 'Transition'. + * + * + * @return a new object of class 'Transition'. + * @generated + */ + Transition createTransition(); + + /** + * Returns a new object of class 'Statechart'. + * + * + * @return a new object of class 'Statechart'. + * @generated + */ + Statechart createStatechart(); + + /** + * Returns a new object of class 'Entry'. + * + * + * @return a new object of class 'Entry'. + * @generated + */ + Entry createEntry(); + + /** + * Returns a new object of class 'Synchronization'. + * + * + * @return a new object of class 'Synchronization'. + * @generated + */ + Synchronization createSynchronization(); + + /** + * Returns a new object of class 'State'. + * + * + * @return a new object of class 'State'. + * @generated + */ + State createState(); + + /** + * Returns a new object of class 'Choice'. + * + * + * @return a new object of class 'Choice'. + * @generated + */ + Choice createChoice(); + + /** + * Returns a new object of class 'Exit'. + * + * + * @return a new object of class 'Exit'. + * @generated + */ + Exit createExit(); + + /** + * Returns a new object of class 'Final State'. + * + * + * @return a new object of class 'Final State'. + * @generated + */ + FinalState createFinalState(); + + /** + * Returns the package supported by this factory. + * + * + * @return the package supported by this factory. + * @generated + */ + YakinduPackage getYakinduPackage(); + +} //YakinduFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduPackage.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduPackage.java new file mode 100644 index 00000000..7fbe176c --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/YakinduPackage.java @@ -0,0 +1,1038 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +/** + * + * The Package for the model. + * It contains accessors for the meta objects to represent + *
      + *
    • each class,
    • + *
    • each feature of each class,
    • + *
    • each operation of each class,
    • + *
    • each enum,
    • + *
    • and each data type
    • + *
    + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduFactory + * @model kind="package" + * @generated + */ +public interface YakinduPackage extends EPackage { + /** + * The package name. + * + * + * @generated + */ + String eNAME = "yakindu"; + + /** + * The package namespace URI. + * + * + * @generated + */ + String eNS_URI = "YakinduMetamodel"; + + /** + * The package namespace name. + * + * + * @generated + */ + String eNS_PREFIX = "yakindu"; + + /** + * The singleton instance of the package. + * + * + * @generated + */ + YakinduPackage eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl.init(); + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getVertex() + * @generated + */ + int VERTEX = 1; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int VERTEX__INCOMING_TRANSITIONS = 0; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int VERTEX__OUTGOING_TRANSITIONS = 1; + + /** + * The number of structural features of the 'Vertex' class. + * + * + * @generated + * @ordered + */ + int VERTEX_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Vertex' class. + * + * + * @generated + * @ordered + */ + int VERTEX_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getPseudostate() + * @generated + */ + int PSEUDOSTATE = 0; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Pseudostate' class. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Pseudostate' class. + * + * + * @generated + * @ordered + */ + int PSEUDOSTATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getRegion() + * @generated + */ + int REGION = 2; + + /** + * The feature id for the 'Vertices' containment reference list. + * + * + * @generated + * @ordered + */ + int REGION__VERTICES = 0; + + /** + * The number of structural features of the 'Region' class. + * + * + * @generated + * @ordered + */ + int REGION_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'Region' class. + * + * + * @generated + * @ordered + */ + int REGION_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getTransition() + * @generated + */ + int TRANSITION = 3; + + /** + * The feature id for the 'Target' reference. + * + * + * @generated + * @ordered + */ + int TRANSITION__TARGET = 0; + + /** + * The feature id for the 'Source' container reference. + * + * + * @generated + * @ordered + */ + int TRANSITION__SOURCE = 1; + + /** + * The number of structural features of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_FEATURE_COUNT = 2; + + /** + * The number of operations of the 'Transition' class. + * + * + * @generated + * @ordered + */ + int TRANSITION_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getCompositeElement() + * @generated + */ + int COMPOSITE_ELEMENT = 9; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT__REGIONS = 0; + + /** + * The number of structural features of the 'Composite Element' class. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT_FEATURE_COUNT = 1; + + /** + * The number of operations of the 'Composite Element' class. + * + * + * @generated + * @ordered + */ + int COMPOSITE_ELEMENT_OPERATION_COUNT = 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getStatechart() + * @generated + */ + int STATECHART = 4; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATECHART__REGIONS = COMPOSITE_ELEMENT__REGIONS; + + /** + * The number of structural features of the 'Statechart' class. + * + * + * @generated + * @ordered + */ + int STATECHART_FEATURE_COUNT = COMPOSITE_ELEMENT_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Statechart' class. + * + * + * @generated + * @ordered + */ + int STATECHART_OPERATION_COUNT = COMPOSITE_ELEMENT_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getEntry() + * @generated + */ + int ENTRY = 5; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int ENTRY__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int ENTRY__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Entry' class. + * + * + * @generated + * @ordered + */ + int ENTRY_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Entry' class. + * + * + * @generated + * @ordered + */ + int ENTRY_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getSynchronization() + * @generated + */ + int SYNCHRONIZATION = 6; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Synchronization' class. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Synchronization' class. + * + * + * @generated + * @ordered + */ + int SYNCHRONIZATION_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getRegularState() + * @generated + */ + int REGULAR_STATE = 8; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Regular State' class. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Regular State' class. + * + * + * @generated + * @ordered + */ + int REGULAR_STATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getState() + * @generated + */ + int STATE = 7; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; + + /** + * The feature id for the 'Regions' containment reference list. + * + * + * @generated + * @ordered + */ + int STATE__REGIONS = REGULAR_STATE_FEATURE_COUNT + 0; + + /** + * The number of structural features of the 'State' class. + * + * + * @generated + * @ordered + */ + int STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 1; + + /** + * The number of operations of the 'State' class. + * + * + * @generated + * @ordered + */ + int STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getChoice() + * @generated + */ + int CHOICE = 10; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int CHOICE__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int CHOICE__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Choice' class. + * + * + * @generated + * @ordered + */ + int CHOICE_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Choice' class. + * + * + * @generated + * @ordered + */ + int CHOICE_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getExit() + * @generated + */ + int EXIT = 11; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int EXIT__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int EXIT__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Exit' class. + * + * + * @generated + * @ordered + */ + int EXIT_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Exit' class. + * + * + * @generated + * @ordered + */ + int EXIT_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; + + /** + * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getFinalState() + * @generated + */ + int FINAL_STATE = 12; + + /** + * The feature id for the 'Incoming Transitions' reference list. + * + * + * @generated + * @ordered + */ + int FINAL_STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; + + /** + * The feature id for the 'Outgoing Transitions' containment reference list. + * + * + * @generated + * @ordered + */ + int FINAL_STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; + + /** + * The number of structural features of the 'Final State' class. + * + * + * @generated + * @ordered + */ + int FINAL_STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 0; + + /** + * The number of operations of the 'Final State' class. + * + * + * @generated + * @ordered + */ + int FINAL_STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; + + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. + * + * + * @return the meta object for class 'Pseudostate'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate + * @generated + */ + EClass getPseudostate(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. + * + * + * @return the meta object for class 'Vertex'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex + * @generated + */ + EClass getVertex(); + + /** + * Returns the meta object for the reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions Incoming Transitions}'. + * + * + * @return the meta object for the reference list 'Incoming Transitions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions() + * @see #getVertex() + * @generated + */ + EReference getVertex_IncomingTransitions(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}'. + * + * + * @return the meta object for the containment reference list 'Outgoing Transitions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions() + * @see #getVertex() + * @generated + */ + EReference getVertex_OutgoingTransitions(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. + * + * + * @return the meta object for class 'Region'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region + * @generated + */ + EClass getRegion(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices Vertices}'. + * + * + * @return the meta object for the containment reference list 'Vertices'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices() + * @see #getRegion() + * @generated + */ + EReference getRegion_Vertices(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. + * + * + * @return the meta object for class 'Transition'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition + * @generated + */ + EClass getTransition(); + + /** + * Returns the meta object for the reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}'. + * + * + * @return the meta object for the reference 'Target'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget() + * @see #getTransition() + * @generated + */ + EReference getTransition_Target(); + + /** + * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}'. + * + * + * @return the meta object for the container reference 'Source'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource() + * @see #getTransition() + * @generated + */ + EReference getTransition_Source(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. + * + * + * @return the meta object for class 'Statechart'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart + * @generated + */ + EClass getStatechart(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. + * + * + * @return the meta object for class 'Entry'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry + * @generated + */ + EClass getEntry(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. + * + * + * @return the meta object for class 'Synchronization'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization + * @generated + */ + EClass getSynchronization(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. + * + * + * @return the meta object for class 'State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State + * @generated + */ + EClass getState(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. + * + * + * @return the meta object for class 'Regular State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState + * @generated + */ + EClass getRegularState(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. + * + * + * @return the meta object for class 'Composite Element'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement + * @generated + */ + EClass getCompositeElement(); + + /** + * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions Regions}'. + * + * + * @return the meta object for the containment reference list 'Regions'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions() + * @see #getCompositeElement() + * @generated + */ + EReference getCompositeElement_Regions(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. + * + * + * @return the meta object for class 'Choice'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice + * @generated + */ + EClass getChoice(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. + * + * + * @return the meta object for class 'Exit'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit + * @generated + */ + EClass getExit(); + + /** + * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. + * + * + * @return the meta object for class 'Final State'. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState + * @generated + */ + EClass getFinalState(); + + /** + * Returns the factory that creates the instances of the model. + * + * + * @return the factory that creates the instances of the model. + * @generated + */ + YakinduFactory getYakinduFactory(); + + /** + * + * Defines literals for the meta objects that represent + *
      + *
    • each class,
    • + *
    • each feature of each class,
    • + *
    • each operation of each class,
    • + *
    • each enum,
    • + *
    • and each data type
    • + *
    + * + * @generated + */ + interface Literals { + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getPseudostate() + * @generated + */ + EClass PSEUDOSTATE = eINSTANCE.getPseudostate(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getVertex() + * @generated + */ + EClass VERTEX = eINSTANCE.getVertex(); + + /** + * The meta object literal for the 'Incoming Transitions' reference list feature. + * + * + * @generated + */ + EReference VERTEX__INCOMING_TRANSITIONS = eINSTANCE.getVertex_IncomingTransitions(); + + /** + * The meta object literal for the 'Outgoing Transitions' containment reference list feature. + * + * + * @generated + */ + EReference VERTEX__OUTGOING_TRANSITIONS = eINSTANCE.getVertex_OutgoingTransitions(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getRegion() + * @generated + */ + EClass REGION = eINSTANCE.getRegion(); + + /** + * The meta object literal for the 'Vertices' containment reference list feature. + * + * + * @generated + */ + EReference REGION__VERTICES = eINSTANCE.getRegion_Vertices(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getTransition() + * @generated + */ + EClass TRANSITION = eINSTANCE.getTransition(); + + /** + * The meta object literal for the 'Target' reference feature. + * + * + * @generated + */ + EReference TRANSITION__TARGET = eINSTANCE.getTransition_Target(); + + /** + * The meta object literal for the 'Source' container reference feature. + * + * + * @generated + */ + EReference TRANSITION__SOURCE = eINSTANCE.getTransition_Source(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getStatechart() + * @generated + */ + EClass STATECHART = eINSTANCE.getStatechart(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getEntry() + * @generated + */ + EClass ENTRY = eINSTANCE.getEntry(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getSynchronization() + * @generated + */ + EClass SYNCHRONIZATION = eINSTANCE.getSynchronization(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getState() + * @generated + */ + EClass STATE = eINSTANCE.getState(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getRegularState() + * @generated + */ + EClass REGULAR_STATE = eINSTANCE.getRegularState(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getCompositeElement() + * @generated + */ + EClass COMPOSITE_ELEMENT = eINSTANCE.getCompositeElement(); + + /** + * The meta object literal for the 'Regions' containment reference list feature. + * + * + * @generated + */ + EReference COMPOSITE_ELEMENT__REGIONS = eINSTANCE.getCompositeElement_Regions(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getChoice() + * @generated + */ + EClass CHOICE = eINSTANCE.getChoice(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getExit() + * @generated + */ + EClass EXIT = eINSTANCE.getExit(); + + /** + * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. + * + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.YakinduPackageImpl#getFinalState() + * @generated + */ + EClass FINAL_STATE = eINSTANCE.getFinalState(); + + } + +} //YakinduPackage diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java index 8fc4883b..b757b42f 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ChoiceImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class ChoiceImpl extends PseudostateImpl implements Choice { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.CHOICE; + return YakinduPackage.Literals.CHOICE; } } //ChoiceImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java index 0218f9c7..8441ed27 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/CompositeElementImpl.java @@ -4,7 +4,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import java.util.Collection; @@ -60,7 +60,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.COMPOSITE_ELEMENT; + return YakinduPackage.Literals.COMPOSITE_ELEMENT; } /** @@ -70,7 +70,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container */ public EList getRegions() { if (regions == null) { - regions = new EObjectContainmentEList(Region.class, this, yakinduPackage.COMPOSITE_ELEMENT__REGIONS); + regions = new EObjectContainmentEList(Region.class, this, YakinduPackage.COMPOSITE_ELEMENT__REGIONS); } return regions; } @@ -83,7 +83,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: return ((InternalEList)getRegions()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); @@ -97,7 +97,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: return getRegions(); } return super.eGet(featureID, resolve, coreType); @@ -112,7 +112,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: getRegions().clear(); getRegions().addAll((Collection)newValue); return; @@ -128,7 +128,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container @Override public void eUnset(int featureID) { switch (featureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: getRegions().clear(); return; } @@ -143,7 +143,7 @@ public abstract class CompositeElementImpl extends MinimalEObjectImpl.Container @Override public boolean eIsSet(int featureID) { switch (featureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: return regions != null && !regions.isEmpty(); } return super.eIsSet(featureID); diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java index d0334475..0603c2a4 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/EntryImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class EntryImpl extends PseudostateImpl implements Entry { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.ENTRY; + return YakinduPackage.Literals.ENTRY; } } //EntryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java index d1448776..4859ef03 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/ExitImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class ExitImpl extends PseudostateImpl implements Exit { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.EXIT; + return YakinduPackage.Literals.EXIT; } } //ExitImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java index 716c096e..c4d4e157 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/FinalStateImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class FinalStateImpl extends RegularStateImpl implements FinalState { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.FINAL_STATE; + return YakinduPackage.Literals.FINAL_STATE; } } //FinalStateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java index b9fc27f3..56c44b78 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/PseudostateImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public abstract class PseudostateImpl extends VertexImpl implements Pseudostate */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.PSEUDOSTATE; + return YakinduPackage.Literals.PSEUDOSTATE; } } //PseudostateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java index fa873aeb..fa529ad6 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegionImpl.java @@ -4,7 +4,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import java.util.Collection; @@ -60,7 +60,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.REGION; + return YakinduPackage.Literals.REGION; } /** @@ -70,7 +70,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { */ public EList getVertices() { if (vertices == null) { - vertices = new EObjectContainmentEList(Vertex.class, this, yakinduPackage.REGION__VERTICES); + vertices = new EObjectContainmentEList(Vertex.class, this, YakinduPackage.REGION__VERTICES); } return vertices; } @@ -83,7 +83,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.REGION__VERTICES: + case YakinduPackage.REGION__VERTICES: return ((InternalEList)getVertices()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); @@ -97,7 +97,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case yakinduPackage.REGION__VERTICES: + case YakinduPackage.REGION__VERTICES: return getVertices(); } return super.eGet(featureID, resolve, coreType); @@ -112,7 +112,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case yakinduPackage.REGION__VERTICES: + case YakinduPackage.REGION__VERTICES: getVertices().clear(); getVertices().addAll((Collection)newValue); return; @@ -128,7 +128,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { @Override public void eUnset(int featureID) { switch (featureID) { - case yakinduPackage.REGION__VERTICES: + case YakinduPackage.REGION__VERTICES: getVertices().clear(); return; } @@ -143,7 +143,7 @@ public class RegionImpl extends MinimalEObjectImpl.Container implements Region { @Override public boolean eIsSet(int featureID) { switch (featureID) { - case yakinduPackage.REGION__VERTICES: + case YakinduPackage.REGION__VERTICES: return vertices != null && !vertices.isEmpty(); } return super.eIsSet(featureID); diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java index bbe21a14..5361d4d5 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/RegularStateImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public abstract class RegularStateImpl extends VertexImpl implements RegularStat */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.REGULAR_STATE; + return YakinduPackage.Literals.REGULAR_STATE; } } //RegularStateImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java index 66ab2a8f..85938d63 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StateImpl.java @@ -5,7 +5,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import java.util.Collection; @@ -59,7 +59,7 @@ public class StateImpl extends RegularStateImpl implements State { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.STATE; + return YakinduPackage.Literals.STATE; } /** @@ -69,7 +69,7 @@ public class StateImpl extends RegularStateImpl implements State { */ public EList getRegions() { if (regions == null) { - regions = new EObjectContainmentEList(Region.class, this, yakinduPackage.STATE__REGIONS); + regions = new EObjectContainmentEList(Region.class, this, YakinduPackage.STATE__REGIONS); } return regions; } @@ -82,7 +82,7 @@ public class StateImpl extends RegularStateImpl implements State { @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.STATE__REGIONS: + case YakinduPackage.STATE__REGIONS: return ((InternalEList)getRegions()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); @@ -96,7 +96,7 @@ public class StateImpl extends RegularStateImpl implements State { @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case yakinduPackage.STATE__REGIONS: + case YakinduPackage.STATE__REGIONS: return getRegions(); } return super.eGet(featureID, resolve, coreType); @@ -111,7 +111,7 @@ public class StateImpl extends RegularStateImpl implements State { @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case yakinduPackage.STATE__REGIONS: + case YakinduPackage.STATE__REGIONS: getRegions().clear(); getRegions().addAll((Collection)newValue); return; @@ -127,7 +127,7 @@ public class StateImpl extends RegularStateImpl implements State { @Override public void eUnset(int featureID) { switch (featureID) { - case yakinduPackage.STATE__REGIONS: + case YakinduPackage.STATE__REGIONS: getRegions().clear(); return; } @@ -142,7 +142,7 @@ public class StateImpl extends RegularStateImpl implements State { @Override public boolean eIsSet(int featureID) { switch (featureID) { - case yakinduPackage.STATE__REGIONS: + case YakinduPackage.STATE__REGIONS: return regions != null && !regions.isEmpty(); } return super.eIsSet(featureID); @@ -157,7 +157,7 @@ public class StateImpl extends RegularStateImpl implements State { public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) { if (baseClass == CompositeElement.class) { switch (derivedFeatureID) { - case yakinduPackage.STATE__REGIONS: return yakinduPackage.COMPOSITE_ELEMENT__REGIONS; + case YakinduPackage.STATE__REGIONS: return YakinduPackage.COMPOSITE_ELEMENT__REGIONS; default: return -1; } } @@ -173,7 +173,7 @@ public class StateImpl extends RegularStateImpl implements State { public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) { if (baseClass == CompositeElement.class) { switch (baseFeatureID) { - case yakinduPackage.COMPOSITE_ELEMENT__REGIONS: return yakinduPackage.STATE__REGIONS; + case YakinduPackage.COMPOSITE_ELEMENT__REGIONS: return YakinduPackage.STATE__REGIONS; default: return -1; } } diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java index 056820ca..a74110da 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/StatechartImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class StatechartImpl extends CompositeElementImpl implements Statechart { */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.STATECHART; + return YakinduPackage.Literals.STATECHART; } } //StatechartImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java index 28ef69ea..3b6cd8eb 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/SynchronizationImpl.java @@ -3,7 +3,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.ecore.EClass; @@ -31,7 +31,7 @@ public class SynchronizationImpl extends PseudostateImpl implements Synchronizat */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.SYNCHRONIZATION; + return YakinduPackage.Literals.SYNCHRONIZATION; } } //SynchronizationImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java index ea1677ee..dfbca048 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/TransitionImpl.java @@ -4,7 +4,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; @@ -58,7 +58,7 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.TRANSITION; + return YakinduPackage.Literals.TRANSITION; } /** @@ -72,7 +72,7 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran target = (Vertex)eResolveProxy(oldTarget); if (target != oldTarget) { if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.RESOLVE, yakinduPackage.TRANSITION__TARGET, oldTarget, target)); + eNotify(new ENotificationImpl(this, Notification.RESOLVE, YakinduPackage.TRANSITION__TARGET, oldTarget, target)); } } return target; @@ -96,7 +96,7 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran Vertex oldTarget = target; target = newTarget; if (eNotificationRequired()) { - ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__TARGET, oldTarget, newTarget); + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, YakinduPackage.TRANSITION__TARGET, oldTarget, newTarget); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; @@ -111,14 +111,14 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran if (newTarget != target) { NotificationChain msgs = null; if (target != null) - msgs = ((InternalEObject)target).eInverseRemove(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + msgs = ((InternalEObject)target).eInverseRemove(this, YakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); if (newTarget != null) - msgs = ((InternalEObject)newTarget).eInverseAdd(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + msgs = ((InternalEObject)newTarget).eInverseAdd(this, YakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); msgs = basicSetTarget(newTarget, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__TARGET, newTarget, newTarget)); + eNotify(new ENotificationImpl(this, Notification.SET, YakinduPackage.TRANSITION__TARGET, newTarget, newTarget)); } /** @@ -127,7 +127,7 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran * @generated */ public Vertex getSource() { - if (eContainerFeatureID() != yakinduPackage.TRANSITION__SOURCE) return null; + if (eContainerFeatureID() != YakinduPackage.TRANSITION__SOURCE) return null; return (Vertex)eInternalContainer(); } @@ -137,7 +137,7 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran * @generated */ public NotificationChain basicSetSource(Vertex newSource, NotificationChain msgs) { - msgs = eBasicSetContainer((InternalEObject)newSource, yakinduPackage.TRANSITION__SOURCE, msgs); + msgs = eBasicSetContainer((InternalEObject)newSource, YakinduPackage.TRANSITION__SOURCE, msgs); return msgs; } @@ -147,19 +147,19 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran * @generated */ public void setSource(Vertex newSource) { - if (newSource != eInternalContainer() || (eContainerFeatureID() != yakinduPackage.TRANSITION__SOURCE && newSource != null)) { + if (newSource != eInternalContainer() || (eContainerFeatureID() != YakinduPackage.TRANSITION__SOURCE && newSource != null)) { if (EcoreUtil.isAncestor(this, newSource)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); NotificationChain msgs = null; if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); if (newSource != null) - msgs = ((InternalEObject)newSource).eInverseAdd(this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); + msgs = ((InternalEObject)newSource).eInverseAdd(this, YakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); msgs = basicSetSource(newSource, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, yakinduPackage.TRANSITION__SOURCE, newSource, newSource)); + eNotify(new ENotificationImpl(this, Notification.SET, YakinduPackage.TRANSITION__SOURCE, newSource, newSource)); } /** @@ -170,11 +170,11 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: if (target != null) - msgs = ((InternalEObject)target).eInverseRemove(this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); + msgs = ((InternalEObject)target).eInverseRemove(this, YakinduPackage.VERTEX__INCOMING_TRANSITIONS, Vertex.class, msgs); return basicSetTarget((Vertex)otherEnd, msgs); - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); return basicSetSource((Vertex)otherEnd, msgs); @@ -190,9 +190,9 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: return basicSetTarget(null, msgs); - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: return basicSetSource(null, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); @@ -206,8 +206,8 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { switch (eContainerFeatureID()) { - case yakinduPackage.TRANSITION__SOURCE: - return eInternalContainer().eInverseRemove(this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); + case YakinduPackage.TRANSITION__SOURCE: + return eInternalContainer().eInverseRemove(this, YakinduPackage.VERTEX__OUTGOING_TRANSITIONS, Vertex.class, msgs); } return super.eBasicRemoveFromContainerFeature(msgs); } @@ -220,10 +220,10 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: if (resolve) return getTarget(); return basicGetTarget(); - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: return getSource(); } return super.eGet(featureID, resolve, coreType); @@ -237,10 +237,10 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: setTarget((Vertex)newValue); return; - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: setSource((Vertex)newValue); return; } @@ -255,10 +255,10 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public void eUnset(int featureID) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: setTarget((Vertex)null); return; - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: setSource((Vertex)null); return; } @@ -273,9 +273,9 @@ public class TransitionImpl extends MinimalEObjectImpl.Container implements Tran @Override public boolean eIsSet(int featureID) { switch (featureID) { - case yakinduPackage.TRANSITION__TARGET: + case YakinduPackage.TRANSITION__TARGET: return target != null; - case yakinduPackage.TRANSITION__SOURCE: + case YakinduPackage.TRANSITION__SOURCE: return getSource() != null; } return super.eIsSet(featureID); diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java index 6f5b9ed3..6384fb51 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/VertexImpl.java @@ -4,7 +4,7 @@ package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; import java.util.Collection; @@ -72,7 +72,7 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements */ @Override protected EClass eStaticClass() { - return yakinduPackage.Literals.VERTEX; + return YakinduPackage.Literals.VERTEX; } /** @@ -82,7 +82,7 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements */ public EList getIncomingTransitions() { if (incomingTransitions == null) { - incomingTransitions = new EObjectWithInverseResolvingEList(Transition.class, this, yakinduPackage.VERTEX__INCOMING_TRANSITIONS, yakinduPackage.TRANSITION__TARGET); + incomingTransitions = new EObjectWithInverseResolvingEList(Transition.class, this, YakinduPackage.VERTEX__INCOMING_TRANSITIONS, YakinduPackage.TRANSITION__TARGET); } return incomingTransitions; } @@ -94,7 +94,7 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements */ public EList getOutgoingTransitions() { if (outgoingTransitions == null) { - outgoingTransitions = new EObjectContainmentWithInverseEList(Transition.class, this, yakinduPackage.VERTEX__OUTGOING_TRANSITIONS, yakinduPackage.TRANSITION__SOURCE); + outgoingTransitions = new EObjectContainmentWithInverseEList(Transition.class, this, YakinduPackage.VERTEX__OUTGOING_TRANSITIONS, YakinduPackage.TRANSITION__SOURCE); } return outgoingTransitions; } @@ -108,9 +108,9 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: return ((InternalEList)(InternalEList)getIncomingTransitions()).basicAdd(otherEnd, msgs); - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: return ((InternalEList)(InternalEList)getOutgoingTransitions()).basicAdd(otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); @@ -124,9 +124,9 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: return ((InternalEList)getIncomingTransitions()).basicRemove(otherEnd, msgs); - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: return ((InternalEList)getOutgoingTransitions()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); @@ -140,9 +140,9 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: return getIncomingTransitions(); - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: return getOutgoingTransitions(); } return super.eGet(featureID, resolve, coreType); @@ -157,11 +157,11 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public void eSet(int featureID, Object newValue) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: getIncomingTransitions().clear(); getIncomingTransitions().addAll((Collection)newValue); return; - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: getOutgoingTransitions().clear(); getOutgoingTransitions().addAll((Collection)newValue); return; @@ -177,10 +177,10 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public void eUnset(int featureID) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: getIncomingTransitions().clear(); return; - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: getOutgoingTransitions().clear(); return; } @@ -195,9 +195,9 @@ public abstract class VertexImpl extends MinimalEObjectImpl.Container implements @Override public boolean eIsSet(int featureID) { switch (featureID) { - case yakinduPackage.VERTEX__INCOMING_TRANSITIONS: + case YakinduPackage.VERTEX__INCOMING_TRANSITIONS: return incomingTransitions != null && !incomingTransitions.isEmpty(); - case yakinduPackage.VERTEX__OUTGOING_TRANSITIONS: + case YakinduPackage.VERTEX__OUTGOING_TRANSITIONS: return outgoingTransitions != null && !outgoingTransitions.isEmpty(); } return super.eIsSet(featureID); diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduFactoryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduFactoryImpl.java new file mode 100644 index 00000000..bd5ee1bd --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduFactoryImpl.java @@ -0,0 +1,183 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.impl.EFactoryImpl; + +import org.eclipse.emf.ecore.plugin.EcorePlugin; + +/** + * + * An implementation of the model Factory. + * + * @generated + */ +public class YakinduFactoryImpl extends EFactoryImpl implements YakinduFactory { + /** + * Creates the default factory implementation. + * + * + * @generated + */ + public static YakinduFactory init() { + try { + YakinduFactory theYakinduFactory = (YakinduFactory)EPackage.Registry.INSTANCE.getEFactory(YakinduPackage.eNS_URI); + if (theYakinduFactory != null) { + return theYakinduFactory; + } + } + catch (Exception exception) { + EcorePlugin.INSTANCE.log(exception); + } + return new YakinduFactoryImpl(); + } + + /** + * Creates an instance of the factory. + * + * + * @generated + */ + public YakinduFactoryImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + public EObject create(EClass eClass) { + switch (eClass.getClassifierID()) { + case YakinduPackage.REGION: return createRegion(); + case YakinduPackage.TRANSITION: return createTransition(); + case YakinduPackage.STATECHART: return createStatechart(); + case YakinduPackage.ENTRY: return createEntry(); + case YakinduPackage.SYNCHRONIZATION: return createSynchronization(); + case YakinduPackage.STATE: return createState(); + case YakinduPackage.CHOICE: return createChoice(); + case YakinduPackage.EXIT: return createExit(); + case YakinduPackage.FINAL_STATE: return createFinalState(); + default: + throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); + } + } + + /** + * + * + * @generated + */ + public Region createRegion() { + RegionImpl region = new RegionImpl(); + return region; + } + + /** + * + * + * @generated + */ + public Transition createTransition() { + TransitionImpl transition = new TransitionImpl(); + return transition; + } + + /** + * + * + * @generated + */ + public Statechart createStatechart() { + StatechartImpl statechart = new StatechartImpl(); + return statechart; + } + + /** + * + * + * @generated + */ + public Entry createEntry() { + EntryImpl entry = new EntryImpl(); + return entry; + } + + /** + * + * + * @generated + */ + public Synchronization createSynchronization() { + SynchronizationImpl synchronization = new SynchronizationImpl(); + return synchronization; + } + + /** + * + * + * @generated + */ + public State createState() { + StateImpl state = new StateImpl(); + return state; + } + + /** + * + * + * @generated + */ + public Choice createChoice() { + ChoiceImpl choice = new ChoiceImpl(); + return choice; + } + + /** + * + * + * @generated + */ + public Exit createExit() { + ExitImpl exit = new ExitImpl(); + return exit; + } + + /** + * + * + * @generated + */ + public FinalState createFinalState() { + FinalStateImpl finalState = new FinalStateImpl(); + return finalState; + } + + /** + * + * + * @generated + */ + public YakinduPackage getYakinduPackage() { + return (YakinduPackage)getEPackage(); + } + + /** + * + * + * @deprecated + * @generated + */ + @Deprecated + public static YakinduPackage getPackage() { + return YakinduPackage.eINSTANCE; + } + +} //YakinduFactoryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduPackageImpl.java new file mode 100644 index 00000000..0796c5d8 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/YakinduPackageImpl.java @@ -0,0 +1,494 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduFactory; +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; + +import org.eclipse.emf.ecore.impl.EPackageImpl; + +/** + * + * An implementation of the model Package. + * + * @generated + */ +public class YakinduPackageImpl extends EPackageImpl implements YakinduPackage { + /** + * + * + * @generated + */ + private EClass pseudostateEClass = null; + + /** + * + * + * @generated + */ + private EClass vertexEClass = null; + + /** + * + * + * @generated + */ + private EClass regionEClass = null; + + /** + * + * + * @generated + */ + private EClass transitionEClass = null; + + /** + * + * + * @generated + */ + private EClass statechartEClass = null; + + /** + * + * + * @generated + */ + private EClass entryEClass = null; + + /** + * + * + * @generated + */ + private EClass synchronizationEClass = null; + + /** + * + * + * @generated + */ + private EClass stateEClass = null; + + /** + * + * + * @generated + */ + private EClass regularStateEClass = null; + + /** + * + * + * @generated + */ + private EClass compositeElementEClass = null; + + /** + * + * + * @generated + */ + private EClass choiceEClass = null; + + /** + * + * + * @generated + */ + private EClass exitEClass = null; + + /** + * + * + * @generated + */ + private EClass finalStateEClass = null; + + /** + * Creates an instance of the model Package, registered with + * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package + * package URI value. + *

    Note: the correct way to create the package is via the static + * factory method {@link #init init()}, which also performs + * initialization of the package, or returns the registered package, + * if one already exists. + * + * + * @see org.eclipse.emf.ecore.EPackage.Registry + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage#eNS_URI + * @see #init() + * @generated + */ + private YakinduPackageImpl() { + super(eNS_URI, YakinduFactory.eINSTANCE); + } + + /** + * + * + * @generated + */ + private static boolean isInited = false; + + /** + * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. + * + *

    This method is used to initialize {@link YakinduPackage#eINSTANCE} when that field is accessed. + * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. + * + * + * @see #eNS_URI + * @see #createPackageContents() + * @see #initializePackageContents() + * @generated + */ + public static YakinduPackage init() { + if (isInited) return (YakinduPackage)EPackage.Registry.INSTANCE.getEPackage(YakinduPackage.eNS_URI); + + // Obtain or create and register package + Object registeredYakinduPackage = EPackage.Registry.INSTANCE.get(eNS_URI); + YakinduPackageImpl theYakinduPackage = registeredYakinduPackage instanceof YakinduPackageImpl ? (YakinduPackageImpl)registeredYakinduPackage : new YakinduPackageImpl(); + + isInited = true; + + // Create package meta-data objects + theYakinduPackage.createPackageContents(); + + // Initialize created meta-data + theYakinduPackage.initializePackageContents(); + + // Mark meta-data to indicate it can't be changed + theYakinduPackage.freeze(); + + // Update the registry and return the package + EPackage.Registry.INSTANCE.put(YakinduPackage.eNS_URI, theYakinduPackage); + return theYakinduPackage; + } + + /** + * + * + * @generated + */ + public EClass getPseudostate() { + return pseudostateEClass; + } + + /** + * + * + * @generated + */ + public EClass getVertex() { + return vertexEClass; + } + + /** + * + * + * @generated + */ + public EReference getVertex_IncomingTransitions() { + return (EReference)vertexEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getVertex_OutgoingTransitions() { + return (EReference)vertexEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getRegion() { + return regionEClass; + } + + /** + * + * + * @generated + */ + public EReference getRegion_Vertices() { + return (EReference)regionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getTransition() { + return transitionEClass; + } + + /** + * + * + * @generated + */ + public EReference getTransition_Target() { + return (EReference)transitionEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EReference getTransition_Source() { + return (EReference)transitionEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @generated + */ + public EClass getStatechart() { + return statechartEClass; + } + + /** + * + * + * @generated + */ + public EClass getEntry() { + return entryEClass; + } + + /** + * + * + * @generated + */ + public EClass getSynchronization() { + return synchronizationEClass; + } + + /** + * + * + * @generated + */ + public EClass getState() { + return stateEClass; + } + + /** + * + * + * @generated + */ + public EClass getRegularState() { + return regularStateEClass; + } + + /** + * + * + * @generated + */ + public EClass getCompositeElement() { + return compositeElementEClass; + } + + /** + * + * + * @generated + */ + public EReference getCompositeElement_Regions() { + return (EReference)compositeElementEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @generated + */ + public EClass getChoice() { + return choiceEClass; + } + + /** + * + * + * @generated + */ + public EClass getExit() { + return exitEClass; + } + + /** + * + * + * @generated + */ + public EClass getFinalState() { + return finalStateEClass; + } + + /** + * + * + * @generated + */ + public YakinduFactory getYakinduFactory() { + return (YakinduFactory)getEFactoryInstance(); + } + + /** + * + * + * @generated + */ + private boolean isCreated = false; + + /** + * Creates the meta-model objects for the package. This method is + * guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void createPackageContents() { + if (isCreated) return; + isCreated = true; + + // Create classes and their features + pseudostateEClass = createEClass(PSEUDOSTATE); + + vertexEClass = createEClass(VERTEX); + createEReference(vertexEClass, VERTEX__INCOMING_TRANSITIONS); + createEReference(vertexEClass, VERTEX__OUTGOING_TRANSITIONS); + + regionEClass = createEClass(REGION); + createEReference(regionEClass, REGION__VERTICES); + + transitionEClass = createEClass(TRANSITION); + createEReference(transitionEClass, TRANSITION__TARGET); + createEReference(transitionEClass, TRANSITION__SOURCE); + + statechartEClass = createEClass(STATECHART); + + entryEClass = createEClass(ENTRY); + + synchronizationEClass = createEClass(SYNCHRONIZATION); + + stateEClass = createEClass(STATE); + + regularStateEClass = createEClass(REGULAR_STATE); + + compositeElementEClass = createEClass(COMPOSITE_ELEMENT); + createEReference(compositeElementEClass, COMPOSITE_ELEMENT__REGIONS); + + choiceEClass = createEClass(CHOICE); + + exitEClass = createEClass(EXIT); + + finalStateEClass = createEClass(FINAL_STATE); + } + + /** + * + * + * @generated + */ + private boolean isInitialized = false; + + /** + * Complete the initialization of the package and its meta-model. This + * method is guarded to have no affect on any invocation but its first. + * + * + * @generated + */ + public void initializePackageContents() { + if (isInitialized) return; + isInitialized = true; + + // Initialize package + setName(eNAME); + setNsPrefix(eNS_PREFIX); + setNsURI(eNS_URI); + + // Create type parameters + + // Set bounds for type parameters + + // Add supertypes to classes + pseudostateEClass.getESuperTypes().add(this.getVertex()); + statechartEClass.getESuperTypes().add(this.getCompositeElement()); + entryEClass.getESuperTypes().add(this.getPseudostate()); + synchronizationEClass.getESuperTypes().add(this.getPseudostate()); + stateEClass.getESuperTypes().add(this.getRegularState()); + stateEClass.getESuperTypes().add(this.getCompositeElement()); + regularStateEClass.getESuperTypes().add(this.getVertex()); + choiceEClass.getESuperTypes().add(this.getPseudostate()); + exitEClass.getESuperTypes().add(this.getPseudostate()); + finalStateEClass.getESuperTypes().add(this.getRegularState()); + + // Initialize classes, features, and operations; add parameters + initEClass(pseudostateEClass, Pseudostate.class, "Pseudostate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(vertexEClass, Vertex.class, "Vertex", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getVertex_IncomingTransitions(), this.getTransition(), this.getTransition_Target(), "incomingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + initEReference(getVertex_OutgoingTransitions(), this.getTransition(), this.getTransition_Source(), "outgoingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(regionEClass, Region.class, "Region", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getRegion_Vertices(), this.getVertex(), null, "vertices", null, 0, -1, Region.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getTransition_Target(), this.getVertex(), this.getVertex_IncomingTransitions(), "target", null, 1, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + initEReference(getTransition_Source(), this.getVertex(), this.getVertex_OutgoingTransitions(), "source", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); + + initEClass(statechartEClass, Statechart.class, "Statechart", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(entryEClass, Entry.class, "Entry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(synchronizationEClass, Synchronization.class, "Synchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(stateEClass, State.class, "State", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(regularStateEClass, RegularState.class, "RegularState", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(compositeElementEClass, CompositeElement.class, "CompositeElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEReference(getCompositeElement_Regions(), this.getRegion(), null, "regions", null, 0, -1, CompositeElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + initEClass(choiceEClass, Choice.class, "Choice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(exitEClass, Exit.class, "Exit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + initEClass(finalStateEClass, FinalState.class, "FinalState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + + // Create resource + createResource(eNS_URI); + } + +} //YakinduPackageImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java deleted file mode 100644 index 5d004565..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduFactoryImpl.java +++ /dev/null @@ -1,183 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; - -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EPackage; - -import org.eclipse.emf.ecore.impl.EFactoryImpl; - -import org.eclipse.emf.ecore.plugin.EcorePlugin; - -/** - * - * An implementation of the model Factory. - * - * @generated - */ -public class yakinduFactoryImpl extends EFactoryImpl implements yakinduFactory { - /** - * Creates the default factory implementation. - * - * - * @generated - */ - public static yakinduFactory init() { - try { - yakinduFactory theyakinduFactory = (yakinduFactory)EPackage.Registry.INSTANCE.getEFactory(yakinduPackage.eNS_URI); - if (theyakinduFactory != null) { - return theyakinduFactory; - } - } - catch (Exception exception) { - EcorePlugin.INSTANCE.log(exception); - } - return new yakinduFactoryImpl(); - } - - /** - * Creates an instance of the factory. - * - * - * @generated - */ - public yakinduFactoryImpl() { - super(); - } - - /** - * - * - * @generated - */ - @Override - public EObject create(EClass eClass) { - switch (eClass.getClassifierID()) { - case yakinduPackage.REGION: return createRegion(); - case yakinduPackage.TRANSITION: return createTransition(); - case yakinduPackage.STATECHART: return createStatechart(); - case yakinduPackage.ENTRY: return createEntry(); - case yakinduPackage.SYNCHRONIZATION: return createSynchronization(); - case yakinduPackage.STATE: return createState(); - case yakinduPackage.CHOICE: return createChoice(); - case yakinduPackage.EXIT: return createExit(); - case yakinduPackage.FINAL_STATE: return createFinalState(); - default: - throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); - } - } - - /** - * - * - * @generated - */ - public Region createRegion() { - RegionImpl region = new RegionImpl(); - return region; - } - - /** - * - * - * @generated - */ - public Transition createTransition() { - TransitionImpl transition = new TransitionImpl(); - return transition; - } - - /** - * - * - * @generated - */ - public Statechart createStatechart() { - StatechartImpl statechart = new StatechartImpl(); - return statechart; - } - - /** - * - * - * @generated - */ - public Entry createEntry() { - EntryImpl entry = new EntryImpl(); - return entry; - } - - /** - * - * - * @generated - */ - public Synchronization createSynchronization() { - SynchronizationImpl synchronization = new SynchronizationImpl(); - return synchronization; - } - - /** - * - * - * @generated - */ - public State createState() { - StateImpl state = new StateImpl(); - return state; - } - - /** - * - * - * @generated - */ - public Choice createChoice() { - ChoiceImpl choice = new ChoiceImpl(); - return choice; - } - - /** - * - * - * @generated - */ - public Exit createExit() { - ExitImpl exit = new ExitImpl(); - return exit; - } - - /** - * - * - * @generated - */ - public FinalState createFinalState() { - FinalStateImpl finalState = new FinalStateImpl(); - return finalState; - } - - /** - * - * - * @generated - */ - public yakinduPackage getyakinduPackage() { - return (yakinduPackage)getEPackage(); - } - - /** - * - * - * @deprecated - * @generated - */ - @Deprecated - public static yakinduPackage getPackage() { - return yakinduPackage.eINSTANCE; - } - -} //yakinduFactoryImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java deleted file mode 100644 index 2213e07f..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/impl/yakinduPackageImpl.java +++ /dev/null @@ -1,494 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl; - -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduFactory; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EReference; - -import org.eclipse.emf.ecore.impl.EPackageImpl; - -/** - * - * An implementation of the model Package. - * - * @generated - */ -public class yakinduPackageImpl extends EPackageImpl implements yakinduPackage { - /** - * - * - * @generated - */ - private EClass pseudostateEClass = null; - - /** - * - * - * @generated - */ - private EClass vertexEClass = null; - - /** - * - * - * @generated - */ - private EClass regionEClass = null; - - /** - * - * - * @generated - */ - private EClass transitionEClass = null; - - /** - * - * - * @generated - */ - private EClass statechartEClass = null; - - /** - * - * - * @generated - */ - private EClass entryEClass = null; - - /** - * - * - * @generated - */ - private EClass synchronizationEClass = null; - - /** - * - * - * @generated - */ - private EClass stateEClass = null; - - /** - * - * - * @generated - */ - private EClass regularStateEClass = null; - - /** - * - * - * @generated - */ - private EClass compositeElementEClass = null; - - /** - * - * - * @generated - */ - private EClass choiceEClass = null; - - /** - * - * - * @generated - */ - private EClass exitEClass = null; - - /** - * - * - * @generated - */ - private EClass finalStateEClass = null; - - /** - * Creates an instance of the model Package, registered with - * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package - * package URI value. - *

    Note: the correct way to create the package is via the static - * factory method {@link #init init()}, which also performs - * initialization of the package, or returns the registered package, - * if one already exists. - * - * - * @see org.eclipse.emf.ecore.EPackage.Registry - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage#eNS_URI - * @see #init() - * @generated - */ - private yakinduPackageImpl() { - super(eNS_URI, yakinduFactory.eINSTANCE); - } - - /** - * - * - * @generated - */ - private static boolean isInited = false; - - /** - * Creates, registers, and initializes the Package for this model, and for any others upon which it depends. - * - *

    This method is used to initialize {@link yakinduPackage#eINSTANCE} when that field is accessed. - * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package. - * - * - * @see #eNS_URI - * @see #createPackageContents() - * @see #initializePackageContents() - * @generated - */ - public static yakinduPackage init() { - if (isInited) return (yakinduPackage)EPackage.Registry.INSTANCE.getEPackage(yakinduPackage.eNS_URI); - - // Obtain or create and register package - yakinduPackageImpl theyakinduPackage = (yakinduPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof yakinduPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new yakinduPackageImpl()); - - isInited = true; - - // Create package meta-data objects - theyakinduPackage.createPackageContents(); - - // Initialize created meta-data - theyakinduPackage.initializePackageContents(); - - // Mark meta-data to indicate it can't be changed - theyakinduPackage.freeze(); - - - // Update the registry and return the package - EPackage.Registry.INSTANCE.put(yakinduPackage.eNS_URI, theyakinduPackage); - return theyakinduPackage; - } - - /** - * - * - * @generated - */ - public EClass getPseudostate() { - return pseudostateEClass; - } - - /** - * - * - * @generated - */ - public EClass getVertex() { - return vertexEClass; - } - - /** - * - * - * @generated - */ - public EReference getVertex_IncomingTransitions() { - return (EReference)vertexEClass.getEStructuralFeatures().get(0); - } - - /** - * - * - * @generated - */ - public EReference getVertex_OutgoingTransitions() { - return (EReference)vertexEClass.getEStructuralFeatures().get(1); - } - - /** - * - * - * @generated - */ - public EClass getRegion() { - return regionEClass; - } - - /** - * - * - * @generated - */ - public EReference getRegion_Vertices() { - return (EReference)regionEClass.getEStructuralFeatures().get(0); - } - - /** - * - * - * @generated - */ - public EClass getTransition() { - return transitionEClass; - } - - /** - * - * - * @generated - */ - public EReference getTransition_Target() { - return (EReference)transitionEClass.getEStructuralFeatures().get(0); - } - - /** - * - * - * @generated - */ - public EReference getTransition_Source() { - return (EReference)transitionEClass.getEStructuralFeatures().get(1); - } - - /** - * - * - * @generated - */ - public EClass getStatechart() { - return statechartEClass; - } - - /** - * - * - * @generated - */ - public EClass getEntry() { - return entryEClass; - } - - /** - * - * - * @generated - */ - public EClass getSynchronization() { - return synchronizationEClass; - } - - /** - * - * - * @generated - */ - public EClass getState() { - return stateEClass; - } - - /** - * - * - * @generated - */ - public EClass getRegularState() { - return regularStateEClass; - } - - /** - * - * - * @generated - */ - public EClass getCompositeElement() { - return compositeElementEClass; - } - - /** - * - * - * @generated - */ - public EReference getCompositeElement_Regions() { - return (EReference)compositeElementEClass.getEStructuralFeatures().get(0); - } - - /** - * - * - * @generated - */ - public EClass getChoice() { - return choiceEClass; - } - - /** - * - * - * @generated - */ - public EClass getExit() { - return exitEClass; - } - - /** - * - * - * @generated - */ - public EClass getFinalState() { - return finalStateEClass; - } - - /** - * - * - * @generated - */ - public yakinduFactory getyakinduFactory() { - return (yakinduFactory)getEFactoryInstance(); - } - - /** - * - * - * @generated - */ - private boolean isCreated = false; - - /** - * Creates the meta-model objects for the package. This method is - * guarded to have no affect on any invocation but its first. - * - * - * @generated - */ - public void createPackageContents() { - if (isCreated) return; - isCreated = true; - - // Create classes and their features - pseudostateEClass = createEClass(PSEUDOSTATE); - - vertexEClass = createEClass(VERTEX); - createEReference(vertexEClass, VERTEX__INCOMING_TRANSITIONS); - createEReference(vertexEClass, VERTEX__OUTGOING_TRANSITIONS); - - regionEClass = createEClass(REGION); - createEReference(regionEClass, REGION__VERTICES); - - transitionEClass = createEClass(TRANSITION); - createEReference(transitionEClass, TRANSITION__TARGET); - createEReference(transitionEClass, TRANSITION__SOURCE); - - statechartEClass = createEClass(STATECHART); - - entryEClass = createEClass(ENTRY); - - synchronizationEClass = createEClass(SYNCHRONIZATION); - - stateEClass = createEClass(STATE); - - regularStateEClass = createEClass(REGULAR_STATE); - - compositeElementEClass = createEClass(COMPOSITE_ELEMENT); - createEReference(compositeElementEClass, COMPOSITE_ELEMENT__REGIONS); - - choiceEClass = createEClass(CHOICE); - - exitEClass = createEClass(EXIT); - - finalStateEClass = createEClass(FINAL_STATE); - } - - /** - * - * - * @generated - */ - private boolean isInitialized = false; - - /** - * Complete the initialization of the package and its meta-model. This - * method is guarded to have no affect on any invocation but its first. - * - * - * @generated - */ - public void initializePackageContents() { - if (isInitialized) return; - isInitialized = true; - - // Initialize package - setName(eNAME); - setNsPrefix(eNS_PREFIX); - setNsURI(eNS_URI); - - // Create type parameters - - // Set bounds for type parameters - - // Add supertypes to classes - pseudostateEClass.getESuperTypes().add(this.getVertex()); - statechartEClass.getESuperTypes().add(this.getCompositeElement()); - entryEClass.getESuperTypes().add(this.getPseudostate()); - synchronizationEClass.getESuperTypes().add(this.getPseudostate()); - stateEClass.getESuperTypes().add(this.getRegularState()); - stateEClass.getESuperTypes().add(this.getCompositeElement()); - regularStateEClass.getESuperTypes().add(this.getVertex()); - choiceEClass.getESuperTypes().add(this.getPseudostate()); - exitEClass.getESuperTypes().add(this.getPseudostate()); - finalStateEClass.getESuperTypes().add(this.getRegularState()); - - // Initialize classes, features, and operations; add parameters - initEClass(pseudostateEClass, Pseudostate.class, "Pseudostate", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(vertexEClass, Vertex.class, "Vertex", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getVertex_IncomingTransitions(), this.getTransition(), this.getTransition_Target(), "incomingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); - initEReference(getVertex_OutgoingTransitions(), this.getTransition(), this.getTransition_Source(), "outgoingTransitions", null, 0, -1, Vertex.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); - - initEClass(regionEClass, Region.class, "Region", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getRegion_Vertices(), this.getVertex(), null, "vertices", null, 0, -1, Region.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); - - initEClass(transitionEClass, Transition.class, "Transition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getTransition_Target(), this.getVertex(), this.getVertex_IncomingTransitions(), "target", null, 1, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); - initEReference(getTransition_Source(), this.getVertex(), this.getVertex_OutgoingTransitions(), "source", null, 0, 1, Transition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); - - initEClass(statechartEClass, Statechart.class, "Statechart", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(entryEClass, Entry.class, "Entry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(synchronizationEClass, Synchronization.class, "Synchronization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(stateEClass, State.class, "State", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(regularStateEClass, RegularState.class, "RegularState", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(compositeElementEClass, CompositeElement.class, "CompositeElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getCompositeElement_Regions(), this.getRegion(), null, "regions", null, 0, -1, CompositeElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - - initEClass(choiceEClass, Choice.class, "Choice", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(exitEClass, Exit.class, "Exit", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - initEClass(finalStateEClass, FinalState.class, "FinalState", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - - // Create resource - createResource(eNS_URI); - } - -} //yakinduPackageImpl diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduAdapterFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduAdapterFactory.java new file mode 100644 index 00000000..566f01e5 --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduAdapterFactory.java @@ -0,0 +1,336 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notifier; + +import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; + +import org.eclipse.emf.ecore.EObject; + +/** + * + * The Adapter Factory for the model. + * It provides an adapter createXXX method for each class of the model. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage + * @generated + */ +public class YakinduAdapterFactory extends AdapterFactoryImpl { + /** + * The cached model package. + * + * + * @generated + */ + protected static YakinduPackage modelPackage; + + /** + * Creates an instance of the adapter factory. + * + * + * @generated + */ + public YakinduAdapterFactory() { + if (modelPackage == null) { + modelPackage = YakinduPackage.eINSTANCE; + } + } + + /** + * Returns whether this factory is applicable for the type of the object. + * + * This implementation returns true if the object is either the model's package or is an instance object of the model. + * + * @return whether this factory is applicable for the type of the object. + * @generated + */ + @Override + public boolean isFactoryForType(Object object) { + if (object == modelPackage) { + return true; + } + if (object instanceof EObject) { + return ((EObject)object).eClass().getEPackage() == modelPackage; + } + return false; + } + + /** + * The switch that delegates to the createXXX methods. + * + * + * @generated + */ + protected YakinduSwitch modelSwitch = + new YakinduSwitch() { + @Override + public Adapter casePseudostate(Pseudostate object) { + return createPseudostateAdapter(); + } + @Override + public Adapter caseVertex(Vertex object) { + return createVertexAdapter(); + } + @Override + public Adapter caseRegion(Region object) { + return createRegionAdapter(); + } + @Override + public Adapter caseTransition(Transition object) { + return createTransitionAdapter(); + } + @Override + public Adapter caseStatechart(Statechart object) { + return createStatechartAdapter(); + } + @Override + public Adapter caseEntry(Entry object) { + return createEntryAdapter(); + } + @Override + public Adapter caseSynchronization(Synchronization object) { + return createSynchronizationAdapter(); + } + @Override + public Adapter caseState(State object) { + return createStateAdapter(); + } + @Override + public Adapter caseRegularState(RegularState object) { + return createRegularStateAdapter(); + } + @Override + public Adapter caseCompositeElement(CompositeElement object) { + return createCompositeElementAdapter(); + } + @Override + public Adapter caseChoice(Choice object) { + return createChoiceAdapter(); + } + @Override + public Adapter caseExit(Exit object) { + return createExitAdapter(); + } + @Override + public Adapter caseFinalState(FinalState object) { + return createFinalStateAdapter(); + } + @Override + public Adapter defaultCase(EObject object) { + return createEObjectAdapter(); + } + }; + + /** + * Creates an adapter for the target. + * + * + * @param target the object to adapt. + * @return the adapter for the target. + * @generated + */ + @Override + public Adapter createAdapter(Notifier target) { + return modelSwitch.doSwitch((EObject)target); + } + + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate + * @generated + */ + public Adapter createPseudostateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex + * @generated + */ + public Adapter createVertexAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region + * @generated + */ + public Adapter createRegionAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition + * @generated + */ + public Adapter createTransitionAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart + * @generated + */ + public Adapter createStatechartAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry + * @generated + */ + public Adapter createEntryAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization + * @generated + */ + public Adapter createSynchronizationAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State + * @generated + */ + public Adapter createStateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState + * @generated + */ + public Adapter createRegularStateAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement + * @generated + */ + public Adapter createCompositeElementAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice + * @generated + */ + public Adapter createChoiceAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit + * @generated + */ + public Adapter createExitAdapter() { + return null; + } + + /** + * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState + * @generated + */ + public Adapter createFinalStateAdapter() { + return null; + } + + /** + * Creates a new adapter for the default case. + * + * This default implementation returns null. + * + * @return the new adapter. + * @generated + */ + public Adapter createEObjectAdapter() { + return null; + } + +} //YakinduAdapterFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduSwitch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduSwitch.java new file mode 100644 index 00000000..fdaff54d --- /dev/null +++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/YakinduSwitch.java @@ -0,0 +1,378 @@ +/** + */ +package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; + +import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; + +import org.eclipse.emf.ecore.util.Switch; + +/** + * + * The Switch for the model's inheritance hierarchy. + * It supports the call {@link #doSwitch(EObject) doSwitch(object)} + * to invoke the caseXXX method for each class of the model, + * starting with the actual class of the object + * and proceeding up the inheritance hierarchy + * until a non-null result is returned, + * which is the result of the switch. + * + * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.YakinduPackage + * @generated + */ +public class YakinduSwitch extends Switch { + /** + * The cached model package + * + * + * @generated + */ + protected static YakinduPackage modelPackage; + + /** + * Creates an instance of the switch. + * + * + * @generated + */ + public YakinduSwitch() { + if (modelPackage == null) { + modelPackage = YakinduPackage.eINSTANCE; + } + } + + /** + * Checks whether this is a switch for the given package. + * + * + * @param ePackage the package in question. + * @return whether this is a switch for the given package. + * @generated + */ + @Override + protected boolean isSwitchFor(EPackage ePackage) { + return ePackage == modelPackage; + } + + /** + * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. + * + * + * @return the first non-null result returned by a caseXXX call. + * @generated + */ + @Override + protected T doSwitch(int classifierID, EObject theEObject) { + switch (classifierID) { + case YakinduPackage.PSEUDOSTATE: { + Pseudostate pseudostate = (Pseudostate)theEObject; + T result = casePseudostate(pseudostate); + if (result == null) result = caseVertex(pseudostate); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.VERTEX: { + Vertex vertex = (Vertex)theEObject; + T result = caseVertex(vertex); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.REGION: { + Region region = (Region)theEObject; + T result = caseRegion(region); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.TRANSITION: { + Transition transition = (Transition)theEObject; + T result = caseTransition(transition); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.STATECHART: { + Statechart statechart = (Statechart)theEObject; + T result = caseStatechart(statechart); + if (result == null) result = caseCompositeElement(statechart); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.ENTRY: { + Entry entry = (Entry)theEObject; + T result = caseEntry(entry); + if (result == null) result = casePseudostate(entry); + if (result == null) result = caseVertex(entry); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.SYNCHRONIZATION: { + Synchronization synchronization = (Synchronization)theEObject; + T result = caseSynchronization(synchronization); + if (result == null) result = casePseudostate(synchronization); + if (result == null) result = caseVertex(synchronization); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.STATE: { + State state = (State)theEObject; + T result = caseState(state); + if (result == null) result = caseRegularState(state); + if (result == null) result = caseCompositeElement(state); + if (result == null) result = caseVertex(state); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.REGULAR_STATE: { + RegularState regularState = (RegularState)theEObject; + T result = caseRegularState(regularState); + if (result == null) result = caseVertex(regularState); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.COMPOSITE_ELEMENT: { + CompositeElement compositeElement = (CompositeElement)theEObject; + T result = caseCompositeElement(compositeElement); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.CHOICE: { + Choice choice = (Choice)theEObject; + T result = caseChoice(choice); + if (result == null) result = casePseudostate(choice); + if (result == null) result = caseVertex(choice); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.EXIT: { + Exit exit = (Exit)theEObject; + T result = caseExit(exit); + if (result == null) result = casePseudostate(exit); + if (result == null) result = caseVertex(exit); + if (result == null) result = defaultCase(theEObject); + return result; + } + case YakinduPackage.FINAL_STATE: { + FinalState finalState = (FinalState)theEObject; + T result = caseFinalState(finalState); + if (result == null) result = caseRegularState(finalState); + if (result == null) result = caseVertex(finalState); + if (result == null) result = defaultCase(theEObject); + return result; + } + default: return defaultCase(theEObject); + } + } + + /** + * Returns the result of interpreting the object as an instance of 'Pseudostate'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Pseudostate'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T casePseudostate(Pseudostate object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Vertex'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Vertex'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseVertex(Vertex object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Region'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Region'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseRegion(Region object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Transition'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Transition'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseTransition(Transition object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Statechart'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Statechart'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseStatechart(Statechart object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Entry'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Entry'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseEntry(Entry object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Synchronization'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Synchronization'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseSynchronization(Synchronization object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseState(State object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Regular State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Regular State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseRegularState(RegularState object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Composite Element'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Composite Element'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseCompositeElement(CompositeElement object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Choice'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Choice'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseChoice(Choice object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Exit'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Exit'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseExit(Exit object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'Final State'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Final State'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @generated + */ + public T caseFinalState(FinalState object) { + return null; + } + + /** + * Returns the result of interpreting the object as an instance of 'EObject'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch, but this is the last case anyway. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'EObject'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) + * @generated + */ + @Override + public T defaultCase(EObject object) { + return null; + } + +} //YakinduSwitch diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java deleted file mode 100644 index b8fafb35..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduAdapterFactory.java +++ /dev/null @@ -1,336 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; - -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; - -import org.eclipse.emf.common.notify.Adapter; -import org.eclipse.emf.common.notify.Notifier; - -import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; - -import org.eclipse.emf.ecore.EObject; - -/** - * - * The Adapter Factory for the model. - * It provides an adapter createXXX method for each class of the model. - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage - * @generated - */ -public class yakinduAdapterFactory extends AdapterFactoryImpl { - /** - * The cached model package. - * - * - * @generated - */ - protected static yakinduPackage modelPackage; - - /** - * Creates an instance of the adapter factory. - * - * - * @generated - */ - public yakinduAdapterFactory() { - if (modelPackage == null) { - modelPackage = yakinduPackage.eINSTANCE; - } - } - - /** - * Returns whether this factory is applicable for the type of the object. - * - * This implementation returns true if the object is either the model's package or is an instance object of the model. - * - * @return whether this factory is applicable for the type of the object. - * @generated - */ - @Override - public boolean isFactoryForType(Object object) { - if (object == modelPackage) { - return true; - } - if (object instanceof EObject) { - return ((EObject)object).eClass().getEPackage() == modelPackage; - } - return false; - } - - /** - * The switch that delegates to the createXXX methods. - * - * - * @generated - */ - protected yakinduSwitch modelSwitch = - new yakinduSwitch() { - @Override - public Adapter casePseudostate(Pseudostate object) { - return createPseudostateAdapter(); - } - @Override - public Adapter caseVertex(Vertex object) { - return createVertexAdapter(); - } - @Override - public Adapter caseRegion(Region object) { - return createRegionAdapter(); - } - @Override - public Adapter caseTransition(Transition object) { - return createTransitionAdapter(); - } - @Override - public Adapter caseStatechart(Statechart object) { - return createStatechartAdapter(); - } - @Override - public Adapter caseEntry(Entry object) { - return createEntryAdapter(); - } - @Override - public Adapter caseSynchronization(Synchronization object) { - return createSynchronizationAdapter(); - } - @Override - public Adapter caseState(State object) { - return createStateAdapter(); - } - @Override - public Adapter caseRegularState(RegularState object) { - return createRegularStateAdapter(); - } - @Override - public Adapter caseCompositeElement(CompositeElement object) { - return createCompositeElementAdapter(); - } - @Override - public Adapter caseChoice(Choice object) { - return createChoiceAdapter(); - } - @Override - public Adapter caseExit(Exit object) { - return createExitAdapter(); - } - @Override - public Adapter caseFinalState(FinalState object) { - return createFinalStateAdapter(); - } - @Override - public Adapter defaultCase(EObject object) { - return createEObjectAdapter(); - } - }; - - /** - * Creates an adapter for the target. - * - * - * @param target the object to adapt. - * @return the adapter for the target. - * @generated - */ - @Override - public Adapter createAdapter(Notifier target) { - return modelSwitch.doSwitch((EObject)target); - } - - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate - * @generated - */ - public Adapter createPseudostateAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex - * @generated - */ - public Adapter createVertexAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region - * @generated - */ - public Adapter createRegionAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition - * @generated - */ - public Adapter createTransitionAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart - * @generated - */ - public Adapter createStatechartAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry - * @generated - */ - public Adapter createEntryAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization - * @generated - */ - public Adapter createSynchronizationAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State - * @generated - */ - public Adapter createStateAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState - * @generated - */ - public Adapter createRegularStateAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement - * @generated - */ - public Adapter createCompositeElementAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice - * @generated - */ - public Adapter createChoiceAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit - * @generated - */ - public Adapter createExitAdapter() { - return null; - } - - /** - * Creates a new adapter for an object of class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. - * - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * - * @return the new adapter. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState - * @generated - */ - public Adapter createFinalStateAdapter() { - return null; - } - - /** - * Creates a new adapter for the default case. - * - * This default implementation returns null. - * - * @return the new adapter. - * @generated - */ - public Adapter createEObjectAdapter() { - return null; - } - -} //yakinduAdapterFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java deleted file mode 100644 index fbc6f821..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/util/yakinduSwitch.java +++ /dev/null @@ -1,378 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util; - -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.*; - -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EPackage; - -import org.eclipse.emf.ecore.util.Switch; - -/** - * - * The Switch for the model's inheritance hierarchy. - * It supports the call {@link #doSwitch(EObject) doSwitch(object)} - * to invoke the caseXXX method for each class of the model, - * starting with the actual class of the object - * and proceeding up the inheritance hierarchy - * until a non-null result is returned, - * which is the result of the switch. - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage - * @generated - */ -public class yakinduSwitch extends Switch { - /** - * The cached model package - * - * - * @generated - */ - protected static yakinduPackage modelPackage; - - /** - * Creates an instance of the switch. - * - * - * @generated - */ - public yakinduSwitch() { - if (modelPackage == null) { - modelPackage = yakinduPackage.eINSTANCE; - } - } - - /** - * Checks whether this is a switch for the given package. - * - * - * @param ePackage the package in question. - * @return whether this is a switch for the given package. - * @generated - */ - @Override - protected boolean isSwitchFor(EPackage ePackage) { - return ePackage == modelPackage; - } - - /** - * Calls caseXXX for each class of the model until one returns a non null result; it yields that result. - * - * - * @return the first non-null result returned by a caseXXX call. - * @generated - */ - @Override - protected T doSwitch(int classifierID, EObject theEObject) { - switch (classifierID) { - case yakinduPackage.PSEUDOSTATE: { - Pseudostate pseudostate = (Pseudostate)theEObject; - T result = casePseudostate(pseudostate); - if (result == null) result = caseVertex(pseudostate); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.VERTEX: { - Vertex vertex = (Vertex)theEObject; - T result = caseVertex(vertex); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.REGION: { - Region region = (Region)theEObject; - T result = caseRegion(region); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.TRANSITION: { - Transition transition = (Transition)theEObject; - T result = caseTransition(transition); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.STATECHART: { - Statechart statechart = (Statechart)theEObject; - T result = caseStatechart(statechart); - if (result == null) result = caseCompositeElement(statechart); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.ENTRY: { - Entry entry = (Entry)theEObject; - T result = caseEntry(entry); - if (result == null) result = casePseudostate(entry); - if (result == null) result = caseVertex(entry); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.SYNCHRONIZATION: { - Synchronization synchronization = (Synchronization)theEObject; - T result = caseSynchronization(synchronization); - if (result == null) result = casePseudostate(synchronization); - if (result == null) result = caseVertex(synchronization); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.STATE: { - State state = (State)theEObject; - T result = caseState(state); - if (result == null) result = caseRegularState(state); - if (result == null) result = caseCompositeElement(state); - if (result == null) result = caseVertex(state); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.REGULAR_STATE: { - RegularState regularState = (RegularState)theEObject; - T result = caseRegularState(regularState); - if (result == null) result = caseVertex(regularState); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.COMPOSITE_ELEMENT: { - CompositeElement compositeElement = (CompositeElement)theEObject; - T result = caseCompositeElement(compositeElement); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.CHOICE: { - Choice choice = (Choice)theEObject; - T result = caseChoice(choice); - if (result == null) result = casePseudostate(choice); - if (result == null) result = caseVertex(choice); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.EXIT: { - Exit exit = (Exit)theEObject; - T result = caseExit(exit); - if (result == null) result = casePseudostate(exit); - if (result == null) result = caseVertex(exit); - if (result == null) result = defaultCase(theEObject); - return result; - } - case yakinduPackage.FINAL_STATE: { - FinalState finalState = (FinalState)theEObject; - T result = caseFinalState(finalState); - if (result == null) result = caseRegularState(finalState); - if (result == null) result = caseVertex(finalState); - if (result == null) result = defaultCase(theEObject); - return result; - } - default: return defaultCase(theEObject); - } - } - - /** - * Returns the result of interpreting the object as an instance of 'Pseudostate'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Pseudostate'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T casePseudostate(Pseudostate object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Vertex'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Vertex'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseVertex(Vertex object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Region'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Region'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseRegion(Region object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Transition'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Transition'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseTransition(Transition object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Statechart'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Statechart'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseStatechart(Statechart object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Entry'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Entry'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseEntry(Entry object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Synchronization'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Synchronization'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseSynchronization(Synchronization object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'State'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'State'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseState(State object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Regular State'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Regular State'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseRegularState(RegularState object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Composite Element'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Composite Element'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseCompositeElement(CompositeElement object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Choice'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Choice'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseChoice(Choice object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Exit'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Exit'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseExit(Exit object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'Final State'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'Final State'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseFinalState(FinalState object) { - return null; - } - - /** - * Returns the result of interpreting the object as an instance of 'EObject'. - * - * This implementation returns null; - * returning a non-null result will terminate the switch, but this is the last case anyway. - * - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of 'EObject'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) - * @generated - */ - @Override - public T defaultCase(EObject object) { - return null; - } - -} //yakinduSwitch diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java deleted file mode 100644 index 6d437ecb..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduFactory.java +++ /dev/null @@ -1,114 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; - -import org.eclipse.emf.ecore.EFactory; - -/** - * - * The Factory for the model. - * It provides a create method for each non-abstract class of the model. - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage - * @generated - */ -public interface yakinduFactory extends EFactory { - /** - * The singleton instance of the factory. - * - * - * @generated - */ - yakinduFactory eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduFactoryImpl.init(); - - /** - * Returns a new object of class 'Region'. - * - * - * @return a new object of class 'Region'. - * @generated - */ - Region createRegion(); - - /** - * Returns a new object of class 'Transition'. - * - * - * @return a new object of class 'Transition'. - * @generated - */ - Transition createTransition(); - - /** - * Returns a new object of class 'Statechart'. - * - * - * @return a new object of class 'Statechart'. - * @generated - */ - Statechart createStatechart(); - - /** - * Returns a new object of class 'Entry'. - * - * - * @return a new object of class 'Entry'. - * @generated - */ - Entry createEntry(); - - /** - * Returns a new object of class 'Synchronization'. - * - * - * @return a new object of class 'Synchronization'. - * @generated - */ - Synchronization createSynchronization(); - - /** - * Returns a new object of class 'State'. - * - * - * @return a new object of class 'State'. - * @generated - */ - State createState(); - - /** - * Returns a new object of class 'Choice'. - * - * - * @return a new object of class 'Choice'. - * @generated - */ - Choice createChoice(); - - /** - * Returns a new object of class 'Exit'. - * - * - * @return a new object of class 'Exit'. - * @generated - */ - Exit createExit(); - - /** - * Returns a new object of class 'Final State'. - * - * - * @return a new object of class 'Final State'. - * @generated - */ - FinalState createFinalState(); - - /** - * Returns the package supported by this factory. - * - * - * @return the package supported by this factory. - * @generated - */ - yakinduPackage getyakinduPackage(); - -} //yakinduFactory diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java deleted file mode 100644 index b3b14944..00000000 --- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/yakinduPackage.java +++ /dev/null @@ -1,1038 +0,0 @@ -/** - */ -package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu; - -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EReference; - -/** - * - * The Package for the model. - * It contains accessors for the meta objects to represent - *

      - *
    • each class,
    • - *
    • each feature of each class,
    • - *
    • each operation of each class,
    • - *
    • each enum,
    • - *
    • and each data type
    • - *
    - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduFactory - * @model kind="package" - * @generated - */ -public interface yakinduPackage extends EPackage { - /** - * The package name. - * - * - * @generated - */ - String eNAME = "yakindu"; - - /** - * The package namespace URI. - * - * - * @generated - */ - String eNS_URI = "YakinduMetamodel"; - - /** - * The package namespace name. - * - * - * @generated - */ - String eNS_PREFIX = "yakindu"; - - /** - * The singleton instance of the package. - * - * - * @generated - */ - yakinduPackage eINSTANCE = ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl.init(); - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getVertex() - * @generated - */ - int VERTEX = 1; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int VERTEX__INCOMING_TRANSITIONS = 0; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int VERTEX__OUTGOING_TRANSITIONS = 1; - - /** - * The number of structural features of the 'Vertex' class. - * - * - * @generated - * @ordered - */ - int VERTEX_FEATURE_COUNT = 2; - - /** - * The number of operations of the 'Vertex' class. - * - * - * @generated - * @ordered - */ - int VERTEX_OPERATION_COUNT = 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getPseudostate() - * @generated - */ - int PSEUDOSTATE = 0; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int PSEUDOSTATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int PSEUDOSTATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Pseudostate' class. - * - * - * @generated - * @ordered - */ - int PSEUDOSTATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Pseudostate' class. - * - * - * @generated - * @ordered - */ - int PSEUDOSTATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegion() - * @generated - */ - int REGION = 2; - - /** - * The feature id for the 'Vertices' containment reference list. - * - * - * @generated - * @ordered - */ - int REGION__VERTICES = 0; - - /** - * The number of structural features of the 'Region' class. - * - * - * @generated - * @ordered - */ - int REGION_FEATURE_COUNT = 1; - - /** - * The number of operations of the 'Region' class. - * - * - * @generated - * @ordered - */ - int REGION_OPERATION_COUNT = 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getTransition() - * @generated - */ - int TRANSITION = 3; - - /** - * The feature id for the 'Target' reference. - * - * - * @generated - * @ordered - */ - int TRANSITION__TARGET = 0; - - /** - * The feature id for the 'Source' container reference. - * - * - * @generated - * @ordered - */ - int TRANSITION__SOURCE = 1; - - /** - * The number of structural features of the 'Transition' class. - * - * - * @generated - * @ordered - */ - int TRANSITION_FEATURE_COUNT = 2; - - /** - * The number of operations of the 'Transition' class. - * - * - * @generated - * @ordered - */ - int TRANSITION_OPERATION_COUNT = 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getCompositeElement() - * @generated - */ - int COMPOSITE_ELEMENT = 9; - - /** - * The feature id for the 'Regions' containment reference list. - * - * - * @generated - * @ordered - */ - int COMPOSITE_ELEMENT__REGIONS = 0; - - /** - * The number of structural features of the 'Composite Element' class. - * - * - * @generated - * @ordered - */ - int COMPOSITE_ELEMENT_FEATURE_COUNT = 1; - - /** - * The number of operations of the 'Composite Element' class. - * - * - * @generated - * @ordered - */ - int COMPOSITE_ELEMENT_OPERATION_COUNT = 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getStatechart() - * @generated - */ - int STATECHART = 4; - - /** - * The feature id for the 'Regions' containment reference list. - * - * - * @generated - * @ordered - */ - int STATECHART__REGIONS = COMPOSITE_ELEMENT__REGIONS; - - /** - * The number of structural features of the 'Statechart' class. - * - * - * @generated - * @ordered - */ - int STATECHART_FEATURE_COUNT = COMPOSITE_ELEMENT_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Statechart' class. - * - * - * @generated - * @ordered - */ - int STATECHART_OPERATION_COUNT = COMPOSITE_ELEMENT_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getEntry() - * @generated - */ - int ENTRY = 5; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int ENTRY__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int ENTRY__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Entry' class. - * - * - * @generated - * @ordered - */ - int ENTRY_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Entry' class. - * - * - * @generated - * @ordered - */ - int ENTRY_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getSynchronization() - * @generated - */ - int SYNCHRONIZATION = 6; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int SYNCHRONIZATION__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int SYNCHRONIZATION__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Synchronization' class. - * - * - * @generated - * @ordered - */ - int SYNCHRONIZATION_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Synchronization' class. - * - * - * @generated - * @ordered - */ - int SYNCHRONIZATION_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegularState() - * @generated - */ - int REGULAR_STATE = 8; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int REGULAR_STATE__INCOMING_TRANSITIONS = VERTEX__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int REGULAR_STATE__OUTGOING_TRANSITIONS = VERTEX__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Regular State' class. - * - * - * @generated - * @ordered - */ - int REGULAR_STATE_FEATURE_COUNT = VERTEX_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Regular State' class. - * - * - * @generated - * @ordered - */ - int REGULAR_STATE_OPERATION_COUNT = VERTEX_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getState() - * @generated - */ - int STATE = 7; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; - - /** - * The feature id for the 'Regions' containment reference list. - * - * - * @generated - * @ordered - */ - int STATE__REGIONS = REGULAR_STATE_FEATURE_COUNT + 0; - - /** - * The number of structural features of the 'State' class. - * - * - * @generated - * @ordered - */ - int STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 1; - - /** - * The number of operations of the 'State' class. - * - * - * @generated - * @ordered - */ - int STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getChoice() - * @generated - */ - int CHOICE = 10; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int CHOICE__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int CHOICE__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Choice' class. - * - * - * @generated - * @ordered - */ - int CHOICE_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Choice' class. - * - * - * @generated - * @ordered - */ - int CHOICE_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getExit() - * @generated - */ - int EXIT = 11; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int EXIT__INCOMING_TRANSITIONS = PSEUDOSTATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int EXIT__OUTGOING_TRANSITIONS = PSEUDOSTATE__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Exit' class. - * - * - * @generated - * @ordered - */ - int EXIT_FEATURE_COUNT = PSEUDOSTATE_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Exit' class. - * - * - * @generated - * @ordered - */ - int EXIT_OPERATION_COUNT = PSEUDOSTATE_OPERATION_COUNT + 0; - - /** - * The meta object id for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getFinalState() - * @generated - */ - int FINAL_STATE = 12; - - /** - * The feature id for the 'Incoming Transitions' reference list. - * - * - * @generated - * @ordered - */ - int FINAL_STATE__INCOMING_TRANSITIONS = REGULAR_STATE__INCOMING_TRANSITIONS; - - /** - * The feature id for the 'Outgoing Transitions' containment reference list. - * - * - * @generated - * @ordered - */ - int FINAL_STATE__OUTGOING_TRANSITIONS = REGULAR_STATE__OUTGOING_TRANSITIONS; - - /** - * The number of structural features of the 'Final State' class. - * - * - * @generated - * @ordered - */ - int FINAL_STATE_FEATURE_COUNT = REGULAR_STATE_FEATURE_COUNT + 0; - - /** - * The number of operations of the 'Final State' class. - * - * - * @generated - * @ordered - */ - int FINAL_STATE_OPERATION_COUNT = REGULAR_STATE_OPERATION_COUNT + 0; - - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate Pseudostate}'. - * - * - * @return the meta object for class 'Pseudostate'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Pseudostate - * @generated - */ - EClass getPseudostate(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex Vertex}'. - * - * - * @return the meta object for class 'Vertex'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex - * @generated - */ - EClass getVertex(); - - /** - * Returns the meta object for the reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions Incoming Transitions}'. - * - * - * @return the meta object for the reference list 'Incoming Transitions'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getIncomingTransitions() - * @see #getVertex() - * @generated - */ - EReference getVertex_IncomingTransitions(); - - /** - * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions Outgoing Transitions}'. - * - * - * @return the meta object for the containment reference list 'Outgoing Transitions'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex#getOutgoingTransitions() - * @see #getVertex() - * @generated - */ - EReference getVertex_OutgoingTransitions(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region Region}'. - * - * - * @return the meta object for class 'Region'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region - * @generated - */ - EClass getRegion(); - - /** - * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices Vertices}'. - * - * - * @return the meta object for the containment reference list 'Vertices'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region#getVertices() - * @see #getRegion() - * @generated - */ - EReference getRegion_Vertices(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition Transition}'. - * - * - * @return the meta object for class 'Transition'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition - * @generated - */ - EClass getTransition(); - - /** - * Returns the meta object for the reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget Target}'. - * - * - * @return the meta object for the reference 'Target'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getTarget() - * @see #getTransition() - * @generated - */ - EReference getTransition_Target(); - - /** - * Returns the meta object for the container reference '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource Source}'. - * - * - * @return the meta object for the container reference 'Source'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition#getSource() - * @see #getTransition() - * @generated - */ - EReference getTransition_Source(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart Statechart}'. - * - * - * @return the meta object for class 'Statechart'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Statechart - * @generated - */ - EClass getStatechart(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry Entry}'. - * - * - * @return the meta object for class 'Entry'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry - * @generated - */ - EClass getEntry(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization Synchronization}'. - * - * - * @return the meta object for class 'Synchronization'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization - * @generated - */ - EClass getSynchronization(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State State}'. - * - * - * @return the meta object for class 'State'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State - * @generated - */ - EClass getState(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState Regular State}'. - * - * - * @return the meta object for class 'Regular State'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.RegularState - * @generated - */ - EClass getRegularState(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement Composite Element}'. - * - * - * @return the meta object for class 'Composite Element'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement - * @generated - */ - EClass getCompositeElement(); - - /** - * Returns the meta object for the containment reference list '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions Regions}'. - * - * - * @return the meta object for the containment reference list 'Regions'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement#getRegions() - * @see #getCompositeElement() - * @generated - */ - EReference getCompositeElement_Regions(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice Choice}'. - * - * - * @return the meta object for class 'Choice'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice - * @generated - */ - EClass getChoice(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit Exit}'. - * - * - * @return the meta object for class 'Exit'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit - * @generated - */ - EClass getExit(); - - /** - * Returns the meta object for class '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState Final State}'. - * - * - * @return the meta object for class 'Final State'. - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState - * @generated - */ - EClass getFinalState(); - - /** - * Returns the factory that creates the instances of the model. - * - * - * @return the factory that creates the instances of the model. - * @generated - */ - yakinduFactory getyakinduFactory(); - - /** - * - * Defines literals for the meta objects that represent - *
      - *
    • each class,
    • - *
    • each feature of each class,
    • - *
    • each operation of each class,
    • - *
    • each enum,
    • - *
    • and each data type
    • - *
    - * - * @generated - */ - interface Literals { - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl Pseudostate}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.PseudostateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getPseudostate() - * @generated - */ - EClass PSEUDOSTATE = eINSTANCE.getPseudostate(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl Vertex}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.VertexImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getVertex() - * @generated - */ - EClass VERTEX = eINSTANCE.getVertex(); - - /** - * The meta object literal for the 'Incoming Transitions' reference list feature. - * - * - * @generated - */ - EReference VERTEX__INCOMING_TRANSITIONS = eINSTANCE.getVertex_IncomingTransitions(); - - /** - * The meta object literal for the 'Outgoing Transitions' containment reference list feature. - * - * - * @generated - */ - EReference VERTEX__OUTGOING_TRANSITIONS = eINSTANCE.getVertex_OutgoingTransitions(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl Region}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegionImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegion() - * @generated - */ - EClass REGION = eINSTANCE.getRegion(); - - /** - * The meta object literal for the 'Vertices' containment reference list feature. - * - * - * @generated - */ - EReference REGION__VERTICES = eINSTANCE.getRegion_Vertices(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl Transition}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.TransitionImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getTransition() - * @generated - */ - EClass TRANSITION = eINSTANCE.getTransition(); - - /** - * The meta object literal for the 'Target' reference feature. - * - * - * @generated - */ - EReference TRANSITION__TARGET = eINSTANCE.getTransition_Target(); - - /** - * The meta object literal for the 'Source' container reference feature. - * - * - * @generated - */ - EReference TRANSITION__SOURCE = eINSTANCE.getTransition_Source(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl Statechart}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StatechartImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getStatechart() - * @generated - */ - EClass STATECHART = eINSTANCE.getStatechart(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl Entry}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.EntryImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getEntry() - * @generated - */ - EClass ENTRY = eINSTANCE.getEntry(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl Synchronization}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.SynchronizationImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getSynchronization() - * @generated - */ - EClass SYNCHRONIZATION = eINSTANCE.getSynchronization(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.StateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getState() - * @generated - */ - EClass STATE = eINSTANCE.getState(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl Regular State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.RegularStateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getRegularState() - * @generated - */ - EClass REGULAR_STATE = eINSTANCE.getRegularState(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl Composite Element}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.CompositeElementImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getCompositeElement() - * @generated - */ - EClass COMPOSITE_ELEMENT = eINSTANCE.getCompositeElement(); - - /** - * The meta object literal for the 'Regions' containment reference list feature. - * - * - * @generated - */ - EReference COMPOSITE_ELEMENT__REGIONS = eINSTANCE.getCompositeElement_Regions(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl Choice}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ChoiceImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getChoice() - * @generated - */ - EClass CHOICE = eINSTANCE.getChoice(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl Exit}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.ExitImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getExit() - * @generated - */ - EClass EXIT = eINSTANCE.getExit(); - - /** - * The meta object literal for the '{@link ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl Final State}' class. - * - * - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.FinalStateImpl - * @see ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl.yakinduPackageImpl#getFinalState() - * @generated - */ - EClass FINAL_STATE = eINSTANCE.getFinalState(); - - } - -} //yakinduPackage diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/plugin.xml b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/plugin.xml index f8fc4d59..33dc7485 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/plugin.xml +++ b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/plugin.xml @@ -236,7 +236,4 @@ - - - diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.EcoreTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.EcoreTest.xtendbin index 7e2c1f12..890872ea 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.EcoreTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.EcoreTest.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FAMTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FAMTest.xtendbin index 9ef2b1a0..8d7947e1 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FAMTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FAMTest.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FileSystemTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FileSystemTest.xtendbin index 468a5b6f..91741fb2 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FileSystemTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.FileSystemTest.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.GeneralTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.GeneralTest.xtendbin index ecbaed63..e1fba1c4 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.GeneralTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.GeneralTest.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.YakinduTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.YakinduTest.xtendbin index bed2786b..22b54964 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.YakinduTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/.YakinduTest.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTest.java b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTest.java index f0d7d924..f8502439 100644 --- a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTest.java +++ b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/icse/YakinduTest.java @@ -1,112 +1,10 @@ package ca.mcgill.ecse.dslreasoner.vampire.icse; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition; -import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage; -import ca.mcgill.ecse.dslreasoner.vampire.icse.GeneralTest; -import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolver; -import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolverConfiguration; -import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic; -import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2LogicConfiguration; -import hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic_Trace; -import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor; -import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; -import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; -import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput; -import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type; -import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; -import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.LogicResult; -import hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic; -import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretation2logic.InstanceModel2Logic; -import hu.bme.mit.inf.dslreasoner.workspace.FileSystemWorkspace; -import java.util.HashMap; -import java.util.Map; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; -import org.eclipse.xtend2.lib.StringConcatenation; -import org.eclipse.xtext.xbase.lib.Exceptions; -import org.eclipse.xtext.xbase.lib.InputOutput; -import org.eclipse.xtext.xbase.lib.ObjectExtensions; -import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; - @SuppressWarnings("all") public class YakinduTest { public static void main(final String[] args) { - try { - final Ecore2Logic ecore2Logic = new Ecore2Logic(); - final Viatra2Logic viatra2Logic = new Viatra2Logic(ecore2Logic); - final InstanceModel2Logic instanceModel2Logic = new InstanceModel2Logic(); - StringConcatenation _builder = new StringConcatenation(); - _builder.append("initialModels/"); - final FileSystemWorkspace inputs = new FileSystemWorkspace(_builder.toString(), ""); - StringConcatenation _builder_1 = new StringConcatenation(); - _builder_1.append("output/YakinduTest/"); - final FileSystemWorkspace workspace = new FileSystemWorkspace(_builder_1.toString(), ""); - workspace.initAndClear(); - final Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; - final Map map = reg.getExtensionToFactoryMap(); - XMIResourceFactoryImpl _xMIResourceFactoryImpl = new XMIResourceFactoryImpl(); - map.put("logicproblem", _xMIResourceFactoryImpl); - InputOutput.println("Input and output workspaces are created"); - final EcoreMetamodelDescriptor metamodel = GeneralTest.loadMetamodel(yakinduPackage.eINSTANCE); - final EList partialModel = GeneralTest.loadPartialModel(inputs, "yakindu/yakinduinstance.xmi"); - final Object queries = null; - InputOutput.println("DSL loaded"); - Ecore2LogicConfiguration _ecore2LogicConfiguration = new Ecore2LogicConfiguration(); - final TracedOutput modelGenerationProblem = ecore2Logic.transformMetamodel(metamodel, _ecore2LogicConfiguration); - LogicProblem problem = modelGenerationProblem.getOutput(); - problem = instanceModel2Logic.transform(modelGenerationProblem, partialModel).getOutput(); - workspace.writeModel(problem, "Yakindu.logicproblem"); - InputOutput.println("Problem created"); - long startTime = System.currentTimeMillis(); - LogicReasoner reasoner = null; - VampireSolver _vampireSolver = new VampireSolver(); - reasoner = _vampireSolver; - final HashMap classMapMin = new HashMap(); - classMapMin.put(Region.class, Integer.valueOf(1)); - classMapMin.put(Transition.class, Integer.valueOf(2)); - classMapMin.put(CompositeElement.class, Integer.valueOf(3)); - final Map typeMapMin = GeneralTest.getTypeMap(classMapMin, metamodel, ecore2Logic, modelGenerationProblem.getTrace()); - final HashMap classMapMax = new HashMap(); - classMapMax.put(Region.class, Integer.valueOf(5)); - classMapMax.put(Transition.class, Integer.valueOf(2)); - classMapMax.put(Synchronization.class, Integer.valueOf(4)); - final Map typeMapMax = GeneralTest.getTypeMap(classMapMax, metamodel, ecore2Logic, modelGenerationProblem.getTrace()); - VampireSolverConfiguration _vampireSolverConfiguration = new VampireSolverConfiguration(); - final Procedure1 _function = (VampireSolverConfiguration it) -> { - it.documentationLevel = DocumentationLevel.FULL; - it.typeScopes.minNewElements = 20; - it.typeScopes.maxNewElements = 30; - int _size = typeMapMin.size(); - boolean _notEquals = (_size != 0); - if (_notEquals) { - it.typeScopes.minNewElementsByType = typeMapMin; - } - int _size_1 = typeMapMin.size(); - boolean _notEquals_1 = (_size_1 != 0); - if (_notEquals_1) { - it.typeScopes.maxNewElementsByType = typeMapMax; - } - it.contCycleLevel = 5; - it.uniquenessDuplicates = false; - }; - final VampireSolverConfiguration vampireConfig = ObjectExtensions.operator_doubleArrow(_vampireSolverConfiguration, _function); - LogicResult solution = reasoner.solve(problem, vampireConfig, workspace); - long _currentTimeMillis = System.currentTimeMillis(); - long _minus = (_currentTimeMillis - startTime); - long totalTimeMin = (_minus / 60000); - long _currentTimeMillis_1 = System.currentTimeMillis(); - long _minus_1 = (_currentTimeMillis_1 - startTime); - long _divide = (_minus_1 / 1000); - long totalTimeSec = (_divide % 60); - InputOutput.println("Problem solved"); - InputOutput.println(((("Time was: " + Long.valueOf(totalTimeMin)) + ":") + Long.valueOf(totalTimeSec))); - } catch (Throwable _e) { - throw Exceptions.sneakyThrow(_e); - } + throw new Error("Unresolved compilation problems:" + + "\nThe method or field yakinduPackage is undefined" + + "\neINSTANCE cannot be resolved"); } } diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.MedicalSystem.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.MedicalSystem.xtendbin index 1bcd0a44..c33ed958 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.MedicalSystem.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.MedicalSystem.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.SimpleRun.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.SimpleRun.xtendbin index 6272497d..9fecf93f 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.SimpleRun.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.SimpleRun.xtendbin differ diff --git a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.VampireTest.xtendbin b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.VampireTest.xtendbin index 2f327d75..7b5be981 100644 Binary files a/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.VampireTest.xtendbin and b/Tests/ca.mcgill.ecse.dslreasoner.vampire.test/xtend-gen/ca/mcgill/ecse/dslreasoner/vampire/test/.VampireTest.xtendbin differ -- cgit v1.2.3-54-g00ecf